api-platform-security について
API Platform の操作、オブジェクト、コレクション、フィールドに対する認可を設計する Symfony 向けスキルです。アクセス制御の実装とテストの手順、注意点を示します。
主な機能
- 01操作ごとのセキュリティ式
- 02複雑な認可の Voter 対応
- 03入力後のセキュリティチェック
- 04ユーザー別のコレクションとフィールド
- 05認可テストのガイダンス
活用シーン
- 01API 操作へのアクセス制限
- 02ユーザー自身のレコードにコレクションを限定
- 03ロールや所有権に応じたフィールドの非表示
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill api-platform-securityインストール後、Claude Code で/api-platform-securityを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
Api Platform Security(Symfony)
使用する場面
- API Platform のリソースの各オペレーションを呼び出せるユーザーを制限する場合。
- 認可がオブジェクト(所有者)または送信されたデータに依存する場合。
- ユーザーにコレクションの一部だけを表示する必要がある場合。
- ロールや所有権に応じてフィールドを非表示にする必要がある場合。
デフォルトのワークフロー
is_granted()、object、userを使ってオペレーションごとにsecurityを設定し、securityMessageも指定します。- 複雑なルールは voter に移します。例:
is_granted('POST_EDIT', object)。 - ルールが入力に依存する場合は
securityPostDenormalizeを使います。Validator の実行後に処理するにはsecurityPostValidationを使います。 QueryCollectionExtensionInterface(およびQueryItemExtensionInterface)または state provider を使って行を絞り込みます。- serializer group と装飾した context builder を使ってフィールドを非表示にし、
access_controlで firewall を保護します。 - 保護された各オペレーションについて、許可されるケースと拒否されるケースの両方をテストします。
ガードレール
- コレクションに対する
security式で行を絞り込まないでください。コレクション全体へのアクセスを制御するものであり、行を絞り込むものではありません。 - チェックの順序:
security、非正規化、securityPostDenormalize、バリデーション、securityPostValidation。 previous_objectはsecurityPostDenormalizeでのみ使用でき、requestはリソースレベルでのみ使用できます。- デフォルトで拒否し、
passwordなどの秘密情報には#[Ignore]を付けます。 getAccessDecision()と Twig のaccess_decision()ヘルパーには Symfony 8.1 以降が必要です。使用前に確認してください。
段階的な情報開示
- 実行時の姿勢とリスク制御にはこのファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを開いてください。
出力要件
- オペレーションごとのセキュリティ式とメッセージ、および関連する voter。
- コレクションとフィールドをユーザーごとに絞り込む方法。
- 許可、拒否、匿名アクセスを網羅するテスト。
リファレンス
reference.md
コメント
Markdown 対応