カテゴリ: Laravel 更新日: 2026/01/06

Laravelでロール・権限別ミドルウェアを作成する方法!初心者向け解説

Laravelでロール・権限別のミドルウェアを作成する方法
Laravelでロール・権限別のミドルウェアを作成する方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Laravelで管理者だけがアクセスできるページを作りたいです。」

先生

「その場合は、ロールや権限に応じてアクセスを制御するミドルウェアを作ると便利です。」

生徒

「ロールや権限って何ですか?」

先生

「ロールとはユーザーの役割のことです。例えば『管理者(admin)』や『一般ユーザー(user)』です。権限はそのロールに付与された操作の範囲を指します。」

生徒

「なるほど。ミドルウェアでどうやって制御するんですか?」

先生

「実際にコードを書きながら見ていきましょう。」

1. ミドルウェアの作成

1. ミドルウェアの作成
1. ミドルウェアの作成

まずは、ターミナルでミドルウェアを作成します。以下のコマンドを実行してください。


php artisan make:middleware RoleMiddleware

このコマンドで app/Http/Middleware/RoleMiddleware.php が作成されます。

2. ミドルウェアの編集

2. ミドルウェアの編集
2. ミドルウェアの編集

次に、作成したミドルウェアにロールチェックの処理を追加します。


namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RoleMiddleware
{
    public function handle(Request $request, Closure $next, $role)
    {
        $user = Auth::user();
        if (!$user || $user->role !== $role) {
            abort(403, 'アクセス権限がありません。');
        }
        return $next($request);
    }
}

ここでは $role を引数として受け取り、ユーザーのロールと比較しています。もし一致しなければ 403 Forbidden を返します。

3. ミドルウェアの登録

3. ミドルウェアの登録
3. ミドルウェアの登録

作成したミドルウェアは app/Http/Kernel.php に登録します。


protected $routeMiddleware = [
    // 既存のミドルウェア
    'role' => \App\Http\Middleware\RoleMiddleware::class,
];

これでルートで role ミドルウェアを利用できるようになります。

4. ルートでの利用例

4. ルートでの利用例
4. ルートでの利用例

管理者専用ページにミドルウェアを適用する場合、以下のようにルートに指定します。


Route::get('/admin/dashboard', 'AdminController@index')
     ->middleware('role:admin');

この設定により、roleadmin のユーザーだけがアクセス可能になります。

5. 複数ロールに対応する場合

5. 複数ロールに対応する場合
5. 複数ロールに対応する場合

複数のロールにアクセスを許可したい場合は、カンマ区切りで指定できます。ミドルウェア側も少し修正が必要です。


public function handle(Request $request, Closure $next, ...$roles)
{
    $user = Auth::user();
    if (!$user || !in_array($user->role, $roles)) {
        abort(403, 'アクセス権限がありません。');
    }
    return $next($request);
}

Route::get('/dashboard', 'DashboardController@index')
     ->middleware('role:admin,editor');

この例では admineditor がアクセス可能です。

6. 注意点

6. 注意点
6. 注意点
  • ユーザーに role カラムが存在することが前提です。
  • 複雑な権限管理が必要な場合はパッケージ(例:Spatie Laravel Permission)を利用するのもおすすめです。
  • 必ず Auth::user() でログインユーザーを取得する
  • 未ログインユーザーは 403 または 401 を返す

7. 実践応用

7. 実践応用
7. 実践応用

このロール・権限ミドルウェアを使うと、管理者用ページ、編集者用ページ、一般ユーザー用ページなどを簡単に制御できます。アクセス制御の基本を理解しておくと、Laravelでのセキュリティ設計がより安全になります。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.7
Java&Spring記事人気No7
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド