laravel:policies-and-authorization について
Laravelでモデル単位や横断的な認可を設計する開発者向けのガイドです。ポリシー、Gate、ミドルウェア、コントローラー属性、拒否時のテストを扱います。
主な機能
- 01モデル操作にポリシーを使用
- 02横断的なチェックにGateを使用
- 03canミドルウェアでルートを保護
- 04属性で操作を認可
- 05拒否レスポンスをテスト
活用シーン
- 01リソースコントローラーの認可設定
- 02特定のルート操作の制限
- 03Laravel 13+コントローラーへの認可属性追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:policies-and-authorizationインストール後、Claude Code で/laravel:policies-and-authorizationを入力して読み込まれたか確認します。
詳細
ポリシーと認可
モデルごとのアクションにはポリシーを、横断的なチェックにはゲートを使用します。
コマンド
# Generate a policy
sail artisan make:policy PostPolicy --model=Post # or: php artisan make:policy PostPolicy --model=Post
# Apply in routes (resource controllers)
Route::resource('posts', PostController::class);
// In controller constructor
$this->authorizeResource(Post::class, 'post');
# One-off checks
$this->authorize('update', $post); // in controller
Gate::allows('manage-billing', $user); // ad-hoc gate
パターン
- リソースのポリシーメソッドを使用します:
viewAny, view, create, update, delete, restore, forceDelete - インラインチェックよりポリシーメソッドを優先します。コントローラーをすっきり保てます
- ポリシーを
AuthServiceProviderに登録します - 手早くルートを保護するには、
canミドルウェアを使用します:->middleware('can:update,post') - テストでは、拒否されるケースに対して
actingAs($user)->get(...)->assertForbidden()をアサートします
Laravel 13+:認可属性
use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;
#[Middleware('auth')]
class CommentController
{
#[Authorize('create', [Comment::class, 'post'])]
public function store(Post $post) { /* ... */ }
#[Authorize('delete', 'comment')]
public function destroy(Comment $comment) { /* ... */ }
}
- 属性を使うと、アクション上でポリシーチェックを確認できます。
$this->authorize(...)と同等です。コードベースごとにどちらかのスタイルを選んでください(laravel:php-attributesを参照)
コメント
Markdown 対応