📝
Laravelのルートパーミッションがもっと簡単に!Enumを活用した新しい書き方
はじめに
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);
});
このように書くことで、それぞれのルートで適切な権限を持つユーザーだけがアクセスできるようになります。
参考記事
Discussion