Laravelではユーザーに役割を設定し、管理者ユーザーしか見れないページを作成できます。
ミドルウェアを使って、管理者ユーザー以外がアクセスすると【404 not found】と出るようにする手順を解説していきます。
「ミドルウェアってなに?」と思ったら、まずはこちらのマンガを見てみてくださいね。
Laravelでアクセス制限をかけて管理者ユーザーしか見れないようにする
管理者(アドミン)ユーザー権限を持つ人のみ、特定のルート設定にアクセスできるようにしていきます。
手順は次のとおり。
- ユーザーに役割をふる
- ミドルウェアを作成し、kernel.phpに登録
- ミドルウェアを設定
- ルート設定を更新
ユーザーに役割をふる
まずはRole(役割)モデルを作っておきます。
その後、UserとRoleに belongsToManyでリレーションを作り、中間テーブル(Pivot)を作っておきます。
方法はこちらで解説しています。
Roleテーブルを作成したら、Role ID=1がアドミンとなるように設定しておきましょう。
【Roleテーブル設定例】
中間テーブルを使って、既存のUserに役割もふっておきます。
ミドルウェアを作成し、kernel.phpに登録
次に、下記のコマンドを入力して AdminMiddlewareを作成します。
1 |
php artisan make:middleware AdminMiddleware |
作成後、app/Httpにある Kerne.php ファイルにミドルウェアを登録しておきましょう。
1 |
'AdminMiddleware' => \App\Http\Middleware\AdminMiddleware::class, |
この手順、結構忘れがち^^;
わたしと同じうっかりさんは、気を付けてくださいね。
ミドルウェアを設定
app/Http/Middlewareの中の、今作成したAdminMiddleware.phpを開きます。
上部に、下記のuse宣言を入れておきます。
1 |
use App\Models\User; |
public function には、次のように入れておきましょう。
1 2 3 4 5 6 7 8 9 10 11 |
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ページが返ってきます。
ルート設定を更新
アドミンユーザー以外見られたくないルート設定に、今作成したミドルウェアをつけておきます。
次のようにすると、複数のルート設定をいれておけます。
1 2 3 |
Route::middleware(['AdminMiddleware'])->group(function(){ アドミン以外見られたくないルート設定 }); |
テスト
最後にテストです。
アドミン権限のないユーザーとして、先ほどミドルウェアをかけたページにアクセスしてみてください。
次のようなページがでれば成功。
アクセス制限は他にも色々な方法でかけられます。
もしこの方法ではイマイチと感じたら、関連記事も見てみてください。