mcpField
L
laravel:policies-and-authorization

laravel:policies-and-authorization

github.com/jpcaparasセキュリティ157154 回インストール17 週間前に更新
リポジトリ

laravel:policies-and-authorization について

Laravelでモデル単位や横断的な認可を設計する開発者向けのガイドです。ポリシー、Gate、ミドルウェア、コントローラー属性、拒否時のテストを扱います。

主な機能

  1. 01モデル操作にポリシーを使用
  2. 02横断的なチェックにGateを使用
  3. 03canミドルウェアでルートを保護
  4. 04属性で操作を認可
  5. 05拒否レスポンスをテスト

活用シーン

  1. 01リソースコントローラーの認可設定
  2. 02特定のルート操作の制限
  3. 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を参照)

コメント