ホームページ >PHPフレームワーク >Laravel >Laravelで権限ベースのナビゲーションメニューを実装する方法

Laravelで権限ベースのナビゲーションメニューを実装する方法

WBOY
WBOYオリジナル
2023-11-02 18:52:481418ブラウズ

Laravelで権限ベースのナビゲーションメニューを実装する方法

Web サイトやアプリケーションがますます複雑になるにつれて、権限管理が重要になります。ユーザーが認証を通じてログインするとき、権限を持っているページや機能にはアクセスできるようにしたいが、権限を持っていないページや機能にはアクセスできないようにしたいと考えています。この記事では、ユーザーに表示される内容を簡単に制御できるように、Laravel で権限ベースのナビゲーション メニューを実装する方法を説明します。

ステップ 1: Laravel をインストールし、データベースを構成する

Laravel にすでに精通している場合は、このステップをスキップできます。それ以外の場合は、次の手順に従って Laravel をインストールします。

  1. Composer をインストールする: Composer をまだインストールしていない場合は、公式ガイドに従って最初にインストールしてください。
  2. Laravel をインストールする: ターミナルを開き、Composer を使用して Laravel をインストールします。

    composer global require laravel/installer
  3. データベースを構成する: .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. 移行の実行: データベースの移行を実行して、必要なテーブルを作成します。

    php artisan migrate

ステップ 2: ルートとコントローラーを設定する

この例では、DashboardController という名前のコントローラーを作成し、そのコントローラーに 3 つのルート :/dashboard、/users を定義します。 、/役割。必要な権限チェックはコントローラーのコンストラクターに追加できます。

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

ステップ 3: アクセス許可ルールを設定する

次に、アクセス許可ルールを定義する必要があります。ここでは、permissions.php という名前のファイルを作成し、必要な権限をすべて定義します。ビジネス ニーズに応じて、権限ルールを変更したり追加したりできます。

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

ステップ 4: ミドルウェアの作成と登録

ユーザーの権限を確認するためのミドルウェアを作成する必要があります。 /app/Http/Middleware ディレクトリに CheckPermissions という名前のミドルウェアを作成します。

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

ご覧のとおり、ミドルウェアはリクエストからルート名を取得し、Auth::user() メソッドを使用して、ユーザーにルートへのアクセス許可があるかどうかを確認します。許可がない場合は、403 Forbidden ステータスが返されます。

次に、ミドルウェアをアプリケーションに登録する必要があります。 /app/Http/Kernel.php ファイルを開き、$middlewareGroups 配列を見つけます。 Web 配列に Permissions というミドルウェアを追加します。

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

ステップ 5: ビューとナビゲーション メニューを作成する

ビュー ファイルにナビゲーション メニューを作成するときは、ユーザーが各リンクにアクセスする権限を持っているかどうかを確認する必要があります。 Auth::user() メソッドを使用して、現在のユーザーが機能に対する特定の権限を持っているかどうかを確認します。

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

ステップ 6: 権限を確認する

ユーザー モデルで、hasPermission() というメソッドを定義します。このメソッドはルート名を受け入れ、ユーザーがそのルートにアクセスできるかどうかを確認します。

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

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

config() 関数を使用して権限ルールを読み取り、ユーザーがルートへのアクセス権限を持っているかどうかを確認します。また、ユーザー モデルの role 属性を使用して、そのユーザーのロールを取得します。

これで、ユーザーが禁止されたページにアクセスしたときにリンクを自動的に無効にする、権限ベースのナビゲーション メニューの作成に成功しました。この記事が、Laravel を使用して権限ベースのナビゲーション メニューを実装する方法を習得するのに役立つことを願っています。

以上がLaravelで権限ベースのナビゲーションメニューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。