Table of Contents
①ミドルウェア作成
下記のコマンドで、app/Http/middlewareの中に上記ファイルを作成
sail artisan make:middleware RoleMiddleware
②adminのみが見れるページを設定
上記で作成したRoleMiddleware.phpにadminのみがリクエストを通れるように設定
public function handle(Request $request, Closure $next): Response
{
if(auth()->user()->role == 'admin') {
//Laravelの認証機能を通じてログインしているuserモデル(中にusersテーブル定義)の中のカラム「role」がadminであれば実行
return $next($request);//リクエストを実行(どのリクエストかはweb.phpに記載)
}
return redirect()->route('dashboard');//上記に該当しなければdashboardへリダイレクト
}
③Kernel.phpの設定
Kernel.phpの$middlewareAliasesの中に上記のパスをと名前(キー)を追記
//自作追加(アドミンのみcreateページを表示)
'admin' => \App\Http\Middleware\RoleMiddleware::class,//admin' というキーはweb.phpで使用
※Laravelでは、すべてのミドルウェアは app/Http/Kernel.php に登録される。
④web.phpに作成したミドルウェアを設定
web.phpのルート設定に上記で作成したミドルウェアを追加設定する。
Route::get('post/create', [PostController::class, 'create'])
->middleware(['auth','admin']);
[]をつけることでミドルウェアを複数書くことが可能。
ミドルウェアは③の$routeMiddleware配列で登録されている名前(キー)を使用して適切な処理を行う
具体的には’auth’ は Authenticate ミドルウェア(デフォルト)を適用、’admin’ は RoleMiddleware に定義されているキーを適用している。
そのキーの中身は②のように個別にファイルで定義されている。
⑤adminのみが下記のURLへ飛べるようになる
http://localhost/post/create
⑥adminしか入れない共通のページがある場合
下記のように、adminしか入れないページをまとめて書くことも可能
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('test', [PostController::class, 'test']);
Route::get('post/create', [PostController::class, 'create']);
});
test、post/createというページは、adminのみが入れるように一括りになる。