6
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelでユーザー情報画面のアクセス制限を実装~Middlewareの活用~

Last updated at Posted at 2020-06-28

##はじめに
LaravelのMiddlewareを活用して、カート画面のような、ユーザー情報画面へのアクセス制限を実装していきます。

##ユーザー情報画面のアクセス制限とは
ユーザー情報画面など、ログインユーザー自身だけが閲覧できるページです。
例えば、カート画面は、カート作成者とログインユーザーが一致した場合のみアクセス可能になります。

カートを作成したAさんのページは、Aさんのみが見れるようにする制御を実装していきます。
Aさんのページを、Aさん以外がアクセスした場合は、特定のページにリダイレクトさせます。

##実行環境
Laravel 5.5

##目次
-Middlewareとは
-実装コード&解説

##Middlewareとは

ミドルウェアを把握する一番良い方法は、HTTPリクエストがアプリケーションに届くまでに通過する、数々の「レイヤー(層)」なのだと考えることです。それぞれのレイヤーは、リクエストを通過させるかどうかテストし、場合により完全に破棄することさえできます。

公式 ミドルウェアより

こちらも、参考になると思います。

Laravelのミドルウェアの実施順検証と小技

##実装コード&解説

今回作成するミドルウェアは、LoginUserCheckとします。

###1.middlewareを作成

ターミナル上で、下記コマンドを実行します。

$ php artisan make:middleware LoginUserCheck

app/Http/Middleware/LoginUserCheck.phpが作成されます。

###2.LoginUserCheck.phpに処理を記述

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でミドルウエアの登録を行います。

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/web.php

Route::group(['middleware' => ['loginUserCheck']], function() {
  //ここに実行したい処理を記述
}

以上で、特定のページは、ログインユーザーと情報作成ユーザーが一致した場合のみ表示させることができるようになります。

##おわりに

ご覧いただきありがとうございました。
修正箇所、ご指摘等ございましたらご意見いただけますと幸いです。

6
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?