📝

Laravelのルートパーミッションがもっと簡単に!Enumを活用した新しい書き方

2025/02/25に公開

はじめに

Laravelでは、ルートのパーミッションチェックをよりシンプルに行うために、can() メソッドで直接 enum を使えるようになっています。これにより、いちいち value プロパティを参照する手間が省け、コードがスッキリして読みやすくなります。


Enumを使ったルートパーミッションの書き方

これまで、enum を使ったパーミッションチェックをするときは、value プロパティを指定する必要がありました。しかし、新しい書き方では、enum をそのまま使うだけで OK です。

従来の書き方:

->can(UserPermission::EDIT_PROFILE->value)

新しい書き方:

->can(UserPermission::EDIT_PROFILE)

これだけで、パーミッションのチェックができるようになりました。シンプルになって、コードが分かりやすくなりますね。


実際のユースケース:ブログシステムでの利用

例えば、ブログシステムでユーザーが自分の投稿を編集・削除できるようにする場合、以下のように enum を定義し、ルートでパーミッションをチェックできます。

1. Enum の定義

まず、app/Enums/UserPermission.php にユーザーの権限を定義します。

<?php

namespace App\Enums;

enum UserPermission: string
{
    case EDIT_OWN_POST = 'edit_own_post';
    case DELETE_OWN_POST = 'delete_own_post';
    // 必要な権限を追加
}

2. ルート定義での活用

次に、routes/web.php でルートごとにパーミッションを設定します。

use App\Enums\UserPermission;

Route::middleware(['auth'])->group(function () {
    Route::get('/post/{id}/edit', [PostController::class, 'edit'])
        ->can(UserPermission::EDIT_OWN_POST);

    Route::delete('/post/{id}', [PostController::class, 'destroy'])
        ->can(UserPermission::DELETE_OWN_POST);
});

このように書くことで、それぞれのルートで適切な権限を持つユーザーだけがアクセスできるようになります。


参考記事

https://laravel-news.com/enum-route-permissions

Laravelダイジェスト

Discussion