管理画面を作っていると、一般ユーザーにはアクセスされたくないページが出てくる。
セキュリティを考えるとIP
制限などが理想だったりするが、Laravel
で簡単に解決したい場合があるので今回はそちらのやり方でやってみる。
カラムの追加とミドルウェアの準備
ユーザー情報を表すuser
テーブルはよく使われているので説明を省く。また、このテーブルには管理者を表すis_admin
カラムを追加しておく。
ミドルウェアは以下のように作る。シンプルにis_admin
ではなかったら404
を返すようにする。
<?php namespace App\Http\Middleware; use App\Models\User; use Closure; use Illuminate\Http\Request; class VerifyAdminUser { /** * @param Request $request * @param Closure $next * @param null $guard * @return mixed */ public function handle($request, Closure $next, $guard = null) { /** @var User $user */ $user = $request->user(); if (!$user->is_admin) { abort(404); } return $next($request); } }
次にApp\Http\Kernel
に上記の作成したミドルウェアを追加する。
<?php ...省略 protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, // 追加 'administrator' => \App\Http\Middleware\VerifyAdminUser::class, ];
ルーティングへの追加
あとはルーティングのmiddleware
に追加するだけで良い。
<?php // middlewareにadministratorを追加 // 非管理者がこのグループにアクセスしようとすると404が帰ってくる Route::group(['middleware' => ['auth:api', 'administrator']], function () { Route::get('/dashboard', 'DashboardController@index')->name('admin.dashboard'); });
ちなみにページも何も用意してないのでただ、404が返ってくる悲しいものになってしまった。
終わりに
今回は管理者以外のユーザーには404を返すようにしたが、リダイレクトするなり他の優しい手段もあるのでそちらもやってみるといいかも。にしてもLaravelのミドルウェア便利だなー。