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

王林
王林Original
2023-11-03 08:35:19874Durchsuche

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 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!

Stellungnahme:
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