About api-platform-security
A Symfony skill for designing API Platform authorization around operations, objects, collections, and fields. It provides a default workflow and guardrails for implementing and testing access controls.
Key features
- 01Per-operation security expressions
- 02Voters for complex authorization
- 03Input-dependent security checks
- 04User-scoped collections and fields
- 05Authorization test guidance
Use cases
- 01Restricting access to API operations
- 02Limiting collections to a user's records
- 03Hiding fields by role or ownership
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill api-platform-securityAfter installing, type/api-platform-securityin Claude Code to confirm it loaded.
Bundled filesreference.md
Details
From the project READMEApi Platform Security (Symfony)
Use when
- Restricting who may call each operation of an API Platform resource.
- Authorization depends on the object (owner) or on the submitted data.
- Users must see only a subset of a collection.
- Fields must be hidden depending on role or ownership.
Default workflow
- Set
securityper operation withis_granted(),object, anduser, plus asecurityMessage. - Move complex rules into voters:
is_granted('POST_EDIT', object). - When the rule depends on input, use
securityPostDenormalize, orsecurityPostValidationto run after the Validator. - Scope rows with a
QueryCollectionExtensionInterface(andQueryItemExtensionInterface) or a state provider. - Hide fields with serializer groups and a decorated context builder, and guard the firewall with
access_control. - Test both the grant and the deny case for every protected operation.
Guardrails
- Never filter rows with a
securityexpression on a collection: it gates the whole collection, it does not scope it. - Order of checks:
security, denormalization,securityPostDenormalize, validation,securityPostValidation. previous_objectexists only insecurityPostDenormalize, andrequestonly at resource level.- Deny by default and mark secrets such as
passwordwith#[Ignore]. getAccessDecision()and the Twigaccess_decision()helper need Symfony 8.1 or later: verify before using them.
Progressive disclosure
- Use this file for execution posture and risk controls.
- Open references when deep implementation details are needed.
Output contract
- The security expression and message per operation, and the voters involved.
- How collections and fields are scoped per user.
- Tests covering allowed, forbidden, and anonymous access.
References
reference.md
Comments
Markdown supported