In Laravel ist es eine häufige Anforderung, das berechtigungsbasierte Anzeigen und Ausblenden von Seitenelementen zu implementieren. In diesem Artikel wird erläutert, wie Sie die Berechtigungsverwaltungsbibliothek „spatie/laravel-permission“ von Laravel verwenden, um die Funktion des dynamischen Renderns von Seitenelementen zu implementieren. Um das Problem besser zu veranschaulichen, wird in diesem Artikel gleichzeitig ein einfaches Beispielprogramm geschrieben.
1. Laravel-Permission installieren
Zuerst müssen Sie das Composer-Paket „spatie/laravel-permission“ im Laravel-Projekt installieren. Verwenden Sie zur Installation den folgenden Befehl:
composer require spatie/laravel-permission
Nach Abschluss der Installation müssen Sie die Migration ausführen, um die entsprechende Berechtigungsverwaltungstabelle zu erstellen:
php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider" --tag="migrations" php artisan migrate
2. Rollen und Berechtigungen definieren
In diesem Beispiel definieren wir zwei Rollen: nämlich „Verwaltung“, „Administrator“ und „Normaler Benutzer“, und erteilen Sie dem Administrator die Berechtigung, alle Daten anzuzeigen.
Zuerst müssen Sie die Konfiguration des Rollen- und Berechtigungsmodells in der Datei config/auth.php hinzufügen:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppModelsUser::class, ], 'roles' => [ 'driver' => 'eloquent', 'model' => SpatiePermissionModelsRole::class, ], 'permissions' => [ 'driver' => 'eloquent', 'model' => SpatiePermissionModelsPermission::class, ], ],
Dann fügen Sie die Zuordnung mit Rollen und Berechtigungen im Benutzermodell hinzu:
namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateFoundationAuthUser as Authenticatable; use SpatiePermissionTraitsHasRoles; class User extends Authenticatable { use HasFactory, HasRoles; //... }
Dann können Sie das definieren Rolle im Seeder und Berechtigungen:
use IlluminateDatabaseSeeder; use SpatiePermissionModelsPermission; use SpatiePermissionModelsRole; class RolesAndPermissionsSeeder extends Seeder { public function run() { //创建角色 Role::create(['name' => 'admin']); Role::create(['name' => 'user']); //创建权限 Permission::create(['name' => 'view_all_data']); //管理员拥有所有权限 Role::findByName('admin')->givePermissionTo(Permission::all()); } }
3. Autorisierung und Authentifizierung
Als nächstes verwenden Sie die Methode „authorize()“ im Controller, um zu bestimmen, ob der Benutzer über bestimmte Berechtigungen verfügt. Beispielsweise erfordert die folgende Indexmethode die Berechtigung „view_all_data“:
public function index() { $this->authorize('view_all_data'); //... }
Darüber hinaus können Sie in der Ansicht mit der Methode can() ermitteln, ob der aktuelle Benutzer über eine bestimmte Berechtigung verfügt. Im folgenden Code wird beispielsweise die Schaltfläche „Alle Daten anzeigen“ nur angezeigt, wenn der Benutzer über die Berechtigung „view_all_data“ verfügt:
@if(auth()->user()->can('view_all_data')) <button>查看所有数据</button> @endif
Wenn Sie eine detailliertere Steuerung wünschen, können Sie dazu die Methode „role()“ verwenden Bestimmen Sie, ob der Benutzer eine bestimmte Rolle hat. Im folgenden Code wird beispielsweise das „Administratormenü“ nur angezeigt, wenn der Benutzer die Rolle „Administrator“ hat:
@if(auth()->user()->hasRole('admin')) <menu>管理员菜单</menu> @endif
4. Dynamisches Rendern von Seitenelementen
Manchmal müssen einige Elemente auf der Seite basieren auf den Rollen oder Berechtigungen des aktuellen Benutzers zum dynamischen Rendern. Sie können beispielsweise festlegen, dass nur Administratoren die Schaltfläche „Löschen“ sehen können:
@if(auth()->user()->can('delete_data')) <button>删除</button> @endif
Wenn es jedoch mehrere Elemente gibt, die basierend auf Berechtigungen dynamisch gerendert werden müssen, muss jedes Element einzeln beurteilt werden, was zu Code führt Doppelarbeit und erhöhte Wartungskosten. Zu diesem Zeitpunkt können Sie diese Funktion in einen Blade-Befehl kapseln und ihn einen Berechtigungsnamen als Parameter akzeptieren lassen:
Blade::directive('can', function ($expression) { return "<?php if(auth()->user()->can({$expression})): ?>"; }); Blade::directive('endcan', function () { return "<?php endif; ?>"; });
Mit diesem Befehl können Sie Seitenelemente auf folgende Weise dynamisch rendern:
@can('delete_data') <button>删除</button> @endcan
Auf diese Weise wird die Code wird prägnanter und klarer.
Zusammenfassung
Durch die Verwendung der Berechtigungsverwaltungsbibliothek „spatie/laravel-permission“ von Laravel können wir das berechtigungsbasierte Anzeigen und Ausblenden von Seitenelementen einfach implementieren. Gleichzeitig kann die Kapselung von dynamisch gerendertem Code in Blade-Anweisungen den Code weiter vereinfachen und die Lesbarkeit und Wartbarkeit des Codes verbessern.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie das berechtigungsbasierte Anzeigen und Ausblenden von Seitenelementen in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!