##はじめに
LaravelのMiddlewareを活用して、カート画面のような、ユーザー情報画面へのアクセス制限を実装していきます。
##ユーザー情報画面のアクセス制限とは
ユーザー情報画面など、ログインユーザー自身だけが閲覧できるページです。
例えば、カート画面は、カート作成者とログインユーザーが一致した場合のみアクセス可能になります。
カートを作成したAさんのページは、Aさんのみが見れるようにする制御を実装していきます。
Aさんのページを、Aさん以外がアクセスした場合は、特定のページにリダイレクトさせます。
##実行環境
Laravel 5.5
##目次
-Middlewareとは
-実装コード&解説
##Middlewareとは
ミドルウェアを把握する一番良い方法は、HTTPリクエストがアプリケーションに届くまでに通過する、数々の「レイヤー(層)」なのだと考えることです。それぞれのレイヤーは、リクエストを通過させるかどうかテストし、場合により完全に破棄することさえできます。
こちらも、参考になると思います。
##実装コード&解説
今回作成するミドルウェアは、LoginUserCheckとします。
###1.middlewareを作成
ターミナル上で、下記コマンドを実行します。
$ php artisan make:middleware LoginUserCheck
app/Http/Middleware/LoginUserCheck.phpが作成されます。
###2.LoginUserCheck.phpに処理を記述
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class LoginUserCheck
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
//ログインユーザーIDを取得
$loginId = Auth::id();
//カート情報のユーザーIDを取得
$requestId = $request->user_id;
//ログイン者とカート情報作成者が一致しなければ別のページにリダイレクト
if ($loginId != $requestId) {
return redirect(route('home'));
}
//チェックに合格し次の処理に進むことができる
return $next($request);
}
}
###3.ミドルウェアの登録
app/Http/Kernel.phpでミドルウエアの登録を行います。
<?php
namespacenamespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
//~~中略~~
protected $middlewareGroups = [
'web' => [
//~~中略~~
],
'api' => [
//~~中略~~
],
//ここから追記箇所
'loginUserCheck' => [
\App\Http\Middleware\LoginUserCheck::class,
],
//ここまで
];
###4.Routeで名前指定
Route::group(['middleware' => ['loginUserCheck']], function() {
//ここに実行したい処理を記述
}
以上で、特定のページは、ログインユーザーと情報作成ユーザーが一致した場合のみ表示させることができるようになります。
##おわりに
ご覧いただきありがとうございました。
修正箇所、ご指摘等ございましたらご意見いただけますと幸いです。