## Laravelで管理者権限の作り方をシンプルにまとめました
色々やり方があるようだったので、シンプルにまとめました。
Laravelプロジェクトが作成されている前提です。
環境
- mac OS Catalina 10.15.6
- Laravel 7.22.4
Gateを使う
AuthServiceProviderの中にあるGateという機能を使います。
ちなみに同じファイル内にPolicyという似た機能を持つものもあります。
【GateとPolicyの使い分け】
- Policyは特定のモデルへのアクションに対して制限を加える場合
- Gateはモデルに関連しないアクションに対してユーザーの制限を加える場合
詳しくはこちら Laravel 7.x 認可
手順
1. XXXXX_create-users-table.phpにroleカラムを追加
今回はroleが1を管理者、5を一般ユーザーに設定します。
XXXXX_create_users_table.php
// Role 1=admin, 5=normal user
$table->tinyInteger('role')->default(5);
2. AuthServiceProviderに追加
isAdminという名前で定義して、管理者かどうか判断します。
AuthServiceProvider.php
public function boot()
{
$this->registerPolicies();
// 管理者権限設定
Gate::define('isAdmin',function($user){
return $user->role === 1;
});
}
3. ルーティングを作成して完了
管理者にだけアクセス許可したいページとコントローラーを作成します。
ルーティングをグループにまとめ、ミドルウェアを設定したら完了です。
web.php
Route::middleware(['auth','can:isAdmin'])->group(function(){
Route::get('/admin','AdminController@index');
});