À mesure que les fonctionnalités des sites Web et des applications deviennent de plus en plus complexes, la gestion des autorisations devient cruciale. Lorsqu'un utilisateur se connecte via l'authentification, nous souhaitons qu'il puisse accéder aux pages et fonctionnalités pour lesquelles il a l'autorisation, mais pas aux pages et fonctionnalités pour lesquelles il n'a pas l'autorisation. Cet article expliquera comment implémenter un menu de navigation basé sur les autorisations dans Laravel afin que nous puissions facilement contrôler ce que l'utilisateur peut voir.
Si vous connaissez déjà Laravel, vous pouvez ignorer cette étape. Sinon, suivez ces étapes pour installer Laravel :
Installer Laravel : ouvrez le terminal et utilisez Composer pour installer Laravel.
composer global require laravel/installer
Configurer la base de données : définissez les paramètres de connexion à la base de données dans le fichier .env.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_username DB_PASSWORD=your_password
Exécuter des migrations : exécutez des migrations de bases de données pour créer les tables requises.
php artisan migrate
Dans cet exemple, nous allons créer un contrôleur nommé DashboardController et définir trois routes pour celui-ci : /dashboard, /users, /roles. Les vérifications d'autorisation nécessaires peuvent être ajoutées dans le constructeur du contrôleur.
<?php namespace AppHttpControllers; use IlluminateHttpRequest; class DashboardController extends Controller { public function __construct() { $this->middleware(['auth', 'permissions']); // 添加授权中间件 } public function index() { return view('dashboard'); } public function users() { return view('users'); } public function roles() { return view('roles'); } }
Ensuite, nous devons définir les règles d'autorisation. Nous créons un fichier appelé permissions.php dans lequel nous définissons toutes les autorisations requises. Vous pouvez modifier ou ajouter des règles d'autorisation supplémentaires en fonction des besoins de votre entreprise.
return [ 'admin' => [ 'dashboard' => true, 'users' => true, 'roles' => true, ], 'editor' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], 'user' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], ];
Nous devons créer un middleware pour vérifier les autorisations de l'utilisateur. Créez un middleware nommé CheckPermissions dans le répertoire /app/Http/Middleware.
<?php namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesAuth; class CheckPermissions { public function handle($request, Closure $next) { $user = Auth::user(); $routeName = $request->route()->getName(); if (!$user->hasPermission($routeName)) { abort(403); } return $next($request); } }
Comme vous pouvez le voir, le middleware obtient le nom de la route à partir de la requête et utilise la méthode Auth::user() pour vérifier si l'utilisateur est autorisé à accéder à la route. S'il n'y a pas d'autorisation, un statut 403 Forbidden sera renvoyé.
Ensuite, nous devons enregistrer le middleware dans l'application. Ouvrez le fichier /app/Http/Kernel.php et recherchez le tableau $middlewareGroups. Ajoutez un middleware appelé autorisations dans le tableau Web.
protected $middlewareGroups = [ 'web' => [ // ... AppHttpMiddlewareCheckPermissions::class, ], // ... ];
Lors de la création du menu de navigation dans le fichier de vue, nous devons vérifier si l'utilisateur est autorisé à accéder à chaque lien. Utilisez la méthode Auth::user() pour vérifier si l'utilisateur actuel dispose d'autorisations spécifiques pour une fonctionnalité.
<nav> <ul> <li><a href="{{ route('dashboard') }}" @if (!Auth::user()->hasPermission('dashboard'))disabled@endif>Dashboard</a></li> <li><a href="{{ route('users') }}" @if (!Auth::user()->hasPermission('users'))disabled@endif>Users</a></li> <li><a href="{{ route('roles') }}" @if (!Auth::user()->hasPermission('roles'))disabled@endif>Roles</a></li> </ul> </nav>
Dans le modèle utilisateur, nous définissons une méthode appelée hasPermission(). Cette méthode accepte un nom de route, puis vérifie si l'utilisateur a accès à cette route.
public function hasPermission($routeName) { $role = $this->role; $permissions = config('permissions.' . $role); return isset($permissions[$routeName]) && $permissions[$routeName]; }
Nous utilisons la fonction config() pour lire les règles d'autorisation et vérifier si l'utilisateur a l'autorisation d'accès à la route. Nous utilisons également l'attribut role dans le modèle utilisateur pour obtenir le rôle de l'utilisateur.
Nous avons maintenant créé avec succès un menu de navigation basé sur les autorisations qui désactive automatiquement les liens lorsque les utilisateurs accèdent à des pages interdites. J'espère que cet article pourra vous aider à maîtriser comment utiliser Laravel pour implémenter un menu de navigation basé sur les autorisations.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!