06 — Gestion des Rôles avec les Enums PHP 8.1 (Role.php)
Qu’est-ce qu’un Enum ?
Un Enum (abréviation de “Enumeration”) est une façon de définir une liste fixe de valeurs possibles.
Sans Enum, vous pourriez écrire 'admin', 'Admin', 'ADMIN' ou 'Administrateur' par erreur. L’Enum garantit que la valeur est toujours correcte.
Avant les Enums (l’ancienne façon)
// ❌ Risqué : des constantes simples
define('ROLE_ADMIN', 'admin');
define('ROLE_USER', 'user');
// On peut toujours se tromper en tapant :
$role = 'Admine'; // Faute de frappe, PHP ne signale rien
Avec un Enum PHP 8.1 (notre approche)
<?php
declare(strict_types=1);
/**
* Énumération des rôles utilisateurs de l'application
* Permet une gestion typée et sécurisée des permissions.
*/
enum Role: string
{
case ADMIN = 'admin';
case USER = 'user';
/**
* Retourne le libellé lisible du rôle (ex: "Administrateur")
*/
public function label(): string
{
return match ($this) {
self::ADMIN => 'Administrateur',
self::USER => 'Utilisateur',
};
}
/**
* Vérifie si le rôle actuel est celui d'un administrateur
*/
public function isAdmin(): bool
{
return $this === self::ADMIN;
}
}
Explication du code
enum Role: string
Roleest le nom de l’Enum: stringsignifie que chaque cas est associé à une chaîne de caractères
case ADMIN = 'admin'
ADMINest le nom interne PHP (en majuscules par convention)'admin'est la valeur stockée en base de données
La méthode label()
Transforme la valeur technique en libellé lisible :
Role::ADMIN->label(); // Retourne "Administrateur"
Role::USER->label(); // Retourne "Utilisateur"
La méthode isAdmin()
Role::ADMIN->isAdmin(); // Retourne true
Role::USER->isAdmin(); // Retourne false
Comment l’utiliser dans le projet
Protéger une page admin
<?php
require_once 'Role.php';
// Bloquer l'accès si pas admin
if (!isset($_SESSION['id']) || $_SESSION['role'] !== Role::ADMIN->value) {
header("Location: connexion.php");
exit();
}
Role::ADMIN->valueretourne la chaîne'admin'qu’on compare à la session.
Convertir depuis la base de données
// La BDD retourne la chaîne 'admin' ou 'user'
$role = Role::from($user['role']); // Convertit en objet Enum
if ($role->isAdmin()) {
echo "Bienvenue, administrateur !";
}
echo $role->label(); // Affiche "Administrateur" ou "Utilisateur"
Dans les templates HTML (admin.php)
<?php foreach ($users as $u): ?>
<span>
<?= Role::from($u['role'])->label() ?>
</span>
<?php endforeach; ?>
La valeur stockée en BDD vs la valeur PHP
| Ce qu’on écrit en PHP | Ce qui est en BDD |
|---|---|
Role::ADMIN |
'admin' |
Role::USER |
'user' |
Role::ADMIN->value |
'admin' (chaîne) |
Dans le header.php : afficher le menu Admin
<?php if($_SESSION['role'] === 'admin'): ?>
<li>
<a href="admin.php">Admin</a>
</li>
<?php endif; ?>
On compare directement avec la chaîne 'admin' pour rester simple dans les vues.
Promouvoir un utilisateur en Admin
Pour l’instant, on le fait manuellement en SQL. En pratique, un admin devrait pouvoir le faire depuis l’interface, mais c’est une fonctionnalité future.
UPDATE membres SET role = 'admin' WHERE id = 5;
🎓 Pour les juniors : L’Enum garantit que votre code n’acceptera jamais une valeur de rôle inconnue. Si quelqu’un tente
Role::from('superadmin'), PHP lancera une exception.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur 06 — Gestion des Rôles avec les Enums PHP 8.1 (Role.php). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.