Heim >PHP-Framework >Laravel >So implementieren Sie ein berechtigungsbasiertes Navigationsmenü in Laravel
Da die Funktionalität von Websites und Anwendungen immer komplexer wird, wird das Berechtigungsmanagement immer wichtiger. Wenn sich ein Benutzer über die Authentifizierung anmeldet, möchten wir, dass er auf Seiten und Funktionen zugreifen kann, für die er eine Berechtigung hat, nicht jedoch auf Seiten und Funktionen, für die er keine Berechtigung hat. In diesem Artikel wird erklärt, wie man ein berechtigungsbasiertes Navigationsmenü in Laravel implementiert, damit wir einfach steuern können, was der Benutzer sehen kann.
Wenn Sie bereits mit Laravel vertraut sind, können Sie diesen Schritt überspringen. Andernfalls befolgen Sie diese Schritte, um Laravel zu installieren:
Laravel installieren: Öffnen Sie das Terminal und verwenden Sie Composer, um Laravel zu installieren.
composer global require laravel/installer
Datenbank konfigurieren: Datenbankverbindungsparameter in der .env-Datei festlegen.
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
Migrationen ausführen: Führen Sie Datenbankmigrationen aus, um die erforderlichen Tabellen zu erstellen.
php artisan migrate
In diesem Beispiel erstellen wir einen Controller mit dem Namen DashboardController und definieren drei Routen dafür: /dashboard, /users, /roles. Notwendige Berechtigungsprüfungen können im Konstruktor des Controllers hinzugefügt werden.
<?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'); } }
Als nächstes müssen wir Berechtigungsregeln definieren. Wir erstellen eine Datei namens „permissions.php“, in der wir alle erforderlichen Berechtigungen definieren. Sie können je nach Ihren Geschäftsanforderungen weitere Berechtigungsregeln ändern oder hinzufügen.
return [ 'admin' => [ 'dashboard' => true, 'users' => true, 'roles' => true, ], 'editor' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], 'user' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], ];
Wir müssen eine Middleware erstellen, um die Berechtigungen des Benutzers zu überprüfen. Erstellen Sie eine Middleware mit dem Namen CheckPermissions im Verzeichnis /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); } }
Wie Sie sehen können, ruft die Middleware den Routennamen aus der Anfrage ab und verwendet die Methode Auth::user(), um zu prüfen, ob der Benutzer die Berechtigung zum Zugriff auf die Route hat. Wenn keine Berechtigung vorliegt, wird der Status „403 Verboten“ zurückgegeben.
Dann müssen wir die Middleware in der Anwendung registrieren. Öffnen Sie die Datei /app/Http/Kernel.php und suchen Sie das Array $middlewareGroups. Fügen Sie im Web-Array eine Middleware namens „Berechtigungen“ hinzu.
protected $middlewareGroups = [ 'web' => [ // ... AppHttpMiddlewareCheckPermissions::class, ], // ... ];
Beim Erstellen des Navigationsmenüs in der Ansichtsdatei müssen wir prüfen, ob der Benutzer die Berechtigung hat, auf jeden Link zuzugreifen. Verwenden Sie die Methode Auth::user(), um zu überprüfen, ob der aktuelle Benutzer über bestimmte Berechtigungen für eine Funktion verfügt.
<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>
Im Benutzermodell definieren wir eine Methode namens hasPermission(). Diese Methode akzeptiert einen Routennamen und prüft dann, ob der Benutzer Zugriff auf diese Route hat.
public function hasPermission($routeName) { $role = $this->role; $permissions = config('permissions.' . $role); return isset($permissions[$routeName]) && $permissions[$routeName]; }
Wir verwenden die Funktion config(), um die Berechtigungsregeln auszulesen und zu prüfen, ob der Benutzer eine Zugriffsberechtigung auf die Route hat. Wir verwenden auch das Rollenattribut im Benutzermodell, um die Rolle des Benutzers abzurufen.
Jetzt haben wir erfolgreich ein berechtigungsbasiertes Navigationsmenü erstellt, das Links automatisch deaktiviert, wenn Benutzer auf gesperrte Seiten zugreifen. Ich hoffe, dieser Artikel kann Ihnen dabei helfen, die Verwendung von Laravel zur Implementierung eines berechtigungsbasierten Navigationsmenüs zu erlernen.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein berechtigungsbasiertes Navigationsmenü in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!