Heim > PHP-Framework > Laravel > So implementieren Sie das berechtigungsbasierte Anzeigen und Ausblenden von Seitenelementen in Laravel

So implementieren Sie das berechtigungsbasierte Anzeigen und Ausblenden von Seitenelementen in Laravel

王林
Freigeben: 2023-11-03 08:35:19
Original
826 Leute haben es durchsucht

So implementieren Sie das berechtigungsbasierte Anzeigen und Ausblenden von Seitenelementen in Laravel

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 dem Login kopieren

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
Nach dem Login kopieren

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,
    ],
],
Nach dem Login kopieren

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;

    //...
}
Nach dem Login kopieren

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());
    }
}
Nach dem Login kopieren

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');
    //...
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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; ?>";
});
Nach dem Login kopieren

Mit diesem Befehl können Sie Seitenelemente auf folgende Weise dynamisch rendern:

@can('delete_data')
    <button>删除</button>
@endcan
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage