🔐 Gérer les rôles et permissions en Laravel avec Spatie
Lorsque tu développes une application Laravel, tu as souvent besoin de gérer les rôles et permissions des utilisateurs. Par exemple :
✅ Un administrateur peut gérer les utilisateurs.
✅ Un éditeur peut modifier des articles.
✅ Un utilisateur ne peut voir que son propre contenu.
Pour gérer cela efficacement, le package Spatie Laravel Permission est la meilleure solution. Il permet de créer des rôles et d’attribuer des permissions facilement.
Dans ce guide, nous allons voir comment installer, configurer et utiliser Spatie pour gérer les rôles et permissions. 🚀
1️⃣ Installation du package Spatie
Tout d’abord, installe le package avec Composer :
bashCopierModifiercomposer require spatie/laravel-permission
Ensuite, publie la configuration et les migrations avec :
bashCopierModifierphp artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
Cela va générer :
- Une config
config/permission.php
- Les migrations pour les rôles et permissions
Puis, exécute la migration :
bashCopierModifierphp artisan migrate
✅ Ton application est prête à gérer les rôles et permissions !
2️⃣ Ajouter les rôles et permissions aux utilisateurs
Le package Spatie fonctionne avec Eloquent. Il faut donc ajouter le trait HasRoles
à ton modèle User
:
📌 Modifie app/Models/User.php
:
phpCopierModifieruse Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}
Cela permet d’utiliser les méthodes pour attribuer des rôles et permissions. 🎯
3️⃣ Créer des rôles et permissions
📌 Créer un rôle et une permission avec Eloquent :
phpCopierModifieruse Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
$admin = Role::create(['name' => 'admin']);
$editor = Role::create(['name' => 'editor']);
$permission = Permission::create(['name' => 'edit articles']);
📌 Assigner une permission à un rôle :
phpCopierModifier$admin->givePermissionTo('edit articles');
📌 Assigner un rôle à un utilisateur :
phpCopierModifier$user = User::find(1);
$user->assignRole('admin');
📌 Vérifier si un utilisateur a un rôle ou une permission :
phpCopierModifierif ($user->hasRole('admin')) {
echo "Cet utilisateur est un administrateur";
}
if ($user->can('edit articles')) {
echo "Cet utilisateur peut modifier des articles";
}
✅ Laravel va gérer les autorisations automatiquement ! 🔥
4️⃣ Protéger les routes avec des rôles et permissions
Tu peux restreindre l’accès aux routes en fonction des rôles et permissions.
📌 Protéger une route avec un middleware :
Dans app/Http/Kernel.php
, ajoute :
phpCopierModifierprotected $middlewareAliases = [
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];
📌 Restreindre une route à un rôle spécifique :
phpCopierModifierRoute::get('/admin', function () {
return "Bienvenue Admin";
})->middleware('role:admin');
📌 Restreindre une route à une permission spécifique :
phpCopierModifierRoute::get('/edit-article', function () {
return "Page de modification d'article";
})->middleware('permission:edit articles');
✅ Laravel bloquera automatiquement les utilisateurs non autorisés. 🚀
5️⃣ Utilisation dans les vues Blade
Dans tes fichiers Blade, tu peux afficher du contenu selon les rôles et permissions.
📌 Afficher un bouton uniquement pour les admins :
bladeCopierModifier@if(auth()->user()->hasRole('admin'))
<a href="/admin">Accéder au panneau d’administration</a>
@endif
📌 Afficher du contenu selon une permission :
bladeCopierModifier@can('edit articles')
<button>Modifier l’article</button>
@endcan
✅ Tu peux personnaliser ton interface selon les autorisations ! 🎨
6️⃣ Gestion avancée des rôles et permissions
🔄 Retirer un rôle ou une permission
📌 Retirer un rôle à un utilisateur :
phpCopierModifier$user->removeRole('admin');
📌 Retirer une permission à un rôle :
phpCopierModifier$role->revokePermissionTo('edit articles');
📌 Vérifier plusieurs rôles
phpCopierModifierif ($user->hasAnyRole(['admin', 'editor'])) {
echo "Cet utilisateur a un rôle d’administrateur ou d’éditeur";
}
📌 Vérifier toutes les permissions
phpCopierModifierif ($user->hasAllPermissions(['edit articles', 'delete articles'])) {
echo "Cet utilisateur peut modifier et supprimer des articles";
}
✅ Tu as un contrôle total sur les autorisations ! 🎯
7️⃣ Bonus : Gestion des rôles et permissions dans un panneau admin
Si tu veux gérer les rôles et permissions avec une interface admin, voici quelques options :
📌 Utiliser Laravel Nova :
- Laravel Nova propose un package pour gérer les rôles avec une interface propre.
- Documentation : https://nova.laravel.com/
📌 Utiliser Filament Admin :
- Un tableau de bord Laravel moderne et gratuit.
- Documentation : https://filamentphp.com/
📌 Créer ton propre CRUD avec Spatie :
Si tu veux une interface 100% personnalisée, tu peux créer un CRUD Laravel classique pour gérer les rôles et permissions.
🔮 Conclusion : Pourquoi utiliser Spatie pour gérer les rôles ?
✅ Facile à installer et utiliser
✅ Système robuste et flexible
✅ Compatible avec Blade, Middleware et API
✅ Extensible pour les applications complexes
👉 Laravel + Spatie = Une gestion des rôles ultra efficace ! 🚀