ホームページ >PHPフレームワーク >Laravel >Laravelで権限ベースのナビゲーションメニューを実装する方法
Web サイトやアプリケーションがますます複雑になるにつれて、権限管理が重要になります。ユーザーが認証を通じてログインするとき、権限を持っているページや機能にはアクセスできるようにしたいが、権限を持っていないページや機能にはアクセスできないようにしたいと考えています。この記事では、ユーザーに表示される内容を簡単に制御できるように、Laravel で権限ベースのナビゲーション メニューを実装する方法を説明します。
Laravel にすでに精通している場合は、このステップをスキップできます。それ以外の場合は、次の手順に従って Laravel をインストールします。
Laravel をインストールする: ターミナルを開き、Composer を使用して Laravel をインストールします。
composer global require laravel/installer
データベースを構成する: .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
移行の実行: データベースの移行を実行して、必要なテーブルを作成します。
php artisan migrate
この例では、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'); } }
次に、アクセス許可ルールを定義する必要があります。ここでは、permissions.php という名前のファイルを作成し、必要な権限をすべて定義します。ビジネス ニーズに応じて、権限ルールを変更したり追加したりできます。
return [ 'admin' => [ 'dashboard' => true, 'users' => true, 'roles' => true, ], 'editor' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], 'user' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], ];
ユーザーの権限を確認するためのミドルウェアを作成する必要があります。 /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, ], // ... ];
ビュー ファイルにナビゲーション メニューを作成するときは、ユーザーが各リンクにアクセスする権限を持っているかどうかを確認する必要があります。 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>
ユーザー モデルで、hasPermission() というメソッドを定義します。このメソッドはルート名を受け入れ、ユーザーがそのルートにアクセスできるかどうかを確認します。
public function hasPermission($routeName) { $role = $this->role; $permissions = config('permissions.' . $role); return isset($permissions[$routeName]) && $permissions[$routeName]; }
config() 関数を使用して権限ルールを読み取り、ユーザーがルートへのアクセス権限を持っているかどうかを確認します。また、ユーザー モデルの role 属性を使用して、そのユーザーのロールを取得します。
これで、ユーザーが禁止されたページにアクセスしたときにリンクを自動的に無効にする、権限ベースのナビゲーション メニューの作成に成功しました。この記事が、Laravel を使用して権限ベースのナビゲーション メニューを実装する方法を習得するのに役立つことを願っています。
以上がLaravelで権限ベースのナビゲーションメニューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。