Heim  >  Artikel  >  PHP-Framework  >  So implementieren Sie ein berechtigungsbasiertes Navigationsmenü in Laravel

So implementieren Sie ein berechtigungsbasiertes Navigationsmenü in Laravel

WBOY
WBOYOriginal
2023-11-02 18:52:481324Durchsuche

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.

Schritt 1: Laravel installieren und Datenbank konfigurieren

Wenn Sie bereits mit Laravel vertraut sind, können Sie diesen Schritt überspringen. Andernfalls befolgen Sie diese Schritte, um Laravel zu installieren:

  1. Composer installieren: Wenn Sie Composer noch nicht installiert haben, befolgen Sie bitte zuerst die offizielle Anleitung, um es zu installieren.
  2. Laravel installieren: Öffnen Sie das Terminal und verwenden Sie Composer, um Laravel zu installieren.

    composer global require laravel/installer
  3. 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
  4. Migrationen ausführen: Führen Sie Datenbankmigrationen aus, um die erforderlichen Tabellen zu erstellen.

    php artisan migrate

Schritt 2: Routen und Controller einrichten

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');
    }
}

Schritt 3: Berechtigungsregeln festlegen

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,
    ],
];

Schritt 4: Middleware erstellen und registrieren

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,
    ],
    // ...
];

Schritt fünf: Ansicht und Navigationsmenü erstellen

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>

Schritt 6: Berechtigungen prüfen

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!

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