Laravelのミドルウェアの設定方法

2025.01.13

①ミドルウェア作成

下記のコマンドで、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のみが入れるように一括りになる。

PIC UP