Laravelではユーザーに役割を設定し、管理者ユーザーしか見れないページを作成できます。
ミドルウェアを使って、管理者ユーザー以外がアクセスすると【404 not found】と出るようにする手順を解説していきます。

「ミドルウェアってなに?」と思ったら、まずはこちらのマンガを見てみてくださいね。
Laravelでアクセス制限をかけて管理者ユーザーしか見れないようにする
管理者(アドミン)ユーザー権限を持つ人のみ、特定のルート設定にアクセスできるようにしていきます。
手順は次のとおり。
- ユーザーに役割をふる
- ミドルウェアを作成し、kernel.phpに登録
- ミドルウェアを設定
- ルート設定を更新
ユーザーに役割をふる
まずはRole(役割)モデルを作っておきます。
その後、UserとRoleに belongsToManyでリレーションを作り、中間テーブル(Pivot)を作っておきます。

方法はこちらで解説しています。
Roleテーブルを作成したら、Role ID=1がアドミンとなるように設定しておきましょう。
【Roleテーブル設定例】

中間テーブルを使って、既存のUserに役割もふっておきます。
ミドルウェアを作成し、kernel.phpに登録
次に、下記のコマンドを入力して AdminMiddlewareを作成します。
php artisan make:middleware AdminMiddleware
作成後、app/Httpにある Kerne.php ファイルにミドルウェアを登録しておきましょう。
'AdminMiddleware' => \App\Http\Middleware\AdminMiddleware::class,


この手順、結構忘れがち^^;
わたしと同じうっかりさんは、気を付けてくださいね。
ミドルウェアを設定
app/Http/Middlewareの中の、今作成したAdminMiddleware.phpを開きます。
上部に、下記のuse宣言を入れておきます。
use App\Models\User;
public function には、次のように入れておきましょう。
public function handle(Request $request, Closure $next)
{
$user = Auth::user();
foreach($user->roles as $role){
if($role->name=='admin'){
return $next($request);
}else{
abort(404);
}
}
}
ログインしたユーザーがアドミンでなければ、404ページが返ってきます。
ルート設定を更新
アドミンユーザー以外見られたくないルート設定に、今作成したミドルウェアをつけておきます。
次のようにすると、複数のルート設定をいれておけます。
Route::middleware(['AdminMiddleware'])->group(function(){
アドミン以外見られたくないルート設定
});
テスト
最後にテストです。
アドミン権限のないユーザーとして、先ほどミドルウェアをかけたページにアクセスしてみてください。
次のようなページがでれば成功。


アクセス制限は他にも色々な方法でかけられます。
もしこの方法ではイマイチと感じたら、関連記事も見てみてください。




コメント