Maison  >  Article  >  cadre php  >  Comment implémenter le menu de navigation basé sur les autorisations dans Laravel

Comment implémenter le menu de navigation basé sur les autorisations dans Laravel

WBOY
WBOYoriginal
2023-11-02 18:52:481327parcourir

Comment implémenter le menu de navigation basé sur les autorisations dans Laravel

À mesure que les fonctionnalités des sites Web et des applications deviennent de plus en plus complexes, la gestion des autorisations devient cruciale. Lorsqu'un utilisateur se connecte via l'authentification, nous souhaitons qu'il puisse accéder aux pages et fonctionnalités pour lesquelles il a l'autorisation, mais pas aux pages et fonctionnalités pour lesquelles il n'a pas l'autorisation. Cet article expliquera comment implémenter un menu de navigation basé sur les autorisations dans Laravel afin que nous puissions facilement contrôler ce que l'utilisateur peut voir.

Étape 1 : Installez Laravel et configurez la base de données

Si vous connaissez déjà Laravel, vous pouvez ignorer cette étape. Sinon, suivez ces étapes pour installer Laravel :

  1. Installer Composer : Si vous n'avez pas encore installé Composer, veuillez d'abord suivre le guide officiel pour l'installer.
  2. Installer Laravel : ouvrez le terminal et utilisez Composer pour installer Laravel.

    composer global require laravel/installer
  3. Configurer la base de données : définissez les paramètres de connexion à la base de données dans le fichier .env.

    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. Exécuter des migrations : exécutez des migrations de bases de données pour créer les tables requises.

    php artisan migrate

Étape 2 : Configurer les routes et les contrôleurs

Dans cet exemple, nous allons créer un contrôleur nommé DashboardController et définir trois routes pour celui-ci : /dashboard, /users, /roles. Les vérifications d'autorisation nécessaires peuvent être ajoutées dans le constructeur du contrôleur.

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

Étape 3 : Définir les règles d'autorisation

Ensuite, nous devons définir les règles d'autorisation. Nous créons un fichier appelé permissions.php dans lequel nous définissons toutes les autorisations requises. Vous pouvez modifier ou ajouter des règles d'autorisation supplémentaires en fonction des besoins de votre entreprise.

return [
    'admin' => [
        'dashboard' => true,
        'users' => true,
        'roles' => true,
    ],
    'editor' => [
        'dashboard' => true,
        'users' => false,
        'roles' => false,
    ],
    'user' => [
        'dashboard' => true,
        'users' => false,
        'roles' => false,
    ],
];

Étape 4 : Créer un middleware et s'inscrire

Nous devons créer un middleware pour vérifier les autorisations de l'utilisateur. Créez un middleware nommé CheckPermissions dans le répertoire /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);
    }
}

Comme vous pouvez le voir, le middleware obtient le nom de la route à partir de la requête et utilise la méthode Auth::user() pour vérifier si l'utilisateur est autorisé à accéder à la route. S'il n'y a pas d'autorisation, un statut 403 Forbidden sera renvoyé.

Ensuite, nous devons enregistrer le middleware dans l'application. Ouvrez le fichier /app/Http/Kernel.php et recherchez le tableau $middlewareGroups. Ajoutez un middleware appelé autorisations dans le tableau Web.

protected $middlewareGroups = [
    'web' => [
        // ...
        AppHttpMiddlewareCheckPermissions::class,
    ],
    // ...
];

Cinquième étape : Créer une vue et un menu de navigation

Lors de la création du menu de navigation dans le fichier de vue, nous devons vérifier si l'utilisateur est autorisé à accéder à chaque lien. Utilisez la méthode Auth::user() pour vérifier si l'utilisateur actuel dispose d'autorisations spécifiques pour une fonctionnalité.

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

Étape 6 : Vérifier les autorisations

Dans le modèle utilisateur, nous définissons une méthode appelée hasPermission(). Cette méthode accepte un nom de route, puis vérifie si l'utilisateur a accès à cette route.

public function hasPermission($routeName)
{
    $role = $this->role;
    $permissions = config('permissions.' . $role);

    return isset($permissions[$routeName]) && $permissions[$routeName];
}

Nous utilisons la fonction config() pour lire les règles d'autorisation et vérifier si l'utilisateur a l'autorisation d'accès à la route. Nous utilisons également l'attribut role dans le modèle utilisateur pour obtenir le rôle de l'utilisateur.

Nous avons maintenant créé avec succès un menu de navigation basé sur les autorisations qui désactive automatiquement les liens lorsque les utilisateurs accèdent à des pages interdites. J'espère que cet article pourra vous aider à maîtriser comment utiliser Laravel pour implémenter un menu de navigation basé sur les autorisations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn