关于 api-platform-security
面向 Symfony 的技能,指导围绕 API Platform 的操作、对象、集合和字段设计授权。它提供实施与测试访问控制的默认流程及安全注意事项。
主要功能
- 01按操作配置安全表达式
- 02用 Voter 处理复杂授权
- 03基于输入执行安全检查
- 04按用户限定集合和字段
- 05授权测试指导
适用场景
- 01限制 API 操作的访问权限
- 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。 - 将复杂规则移至投票器:
is_granted('POST_EDIT', object)。 - 规则取决于输入时,使用
securityPostDenormalize;若要在 Validator 之后运行,则使用securityPostValidation。 - 使用
QueryCollectionExtensionInterface(以及QueryItemExtensionInterface)或状态提供程序限定行的范围。 - 使用序列化器分组和装饰后的上下文构建器隐藏字段,并使用
access_control保护防火墙。 - 为每项受保护操作测试授权和拒绝两种情况。
防护措施
- 切勿通过集合上的
security表达式筛选行:它会控制整个集合的访问,而不是限定集合范围。 - 检查顺序:
security、反规范化、securityPostDenormalize、验证、securityPostValidation。 previous_object仅在securityPostDenormalize中存在,request仅在资源级别存在。- 默认拒绝访问,并使用
#[Ignore]标记password等机密信息。 getAccessDecision()和 Twig 的access_decision()助手需要 Symfony 8.1 或更高版本:使用前请确认。
渐进式披露
- 使用此文件了解执行策略和风险控制。
- 需要深入了解实现细节时,打开参考资料。
输出约定
- 每项操作的安全表达式和消息,以及涉及的投票器。
- 如何按用户限定集合和字段的范围。
- 覆盖允许访问、禁止访问和匿名访问的测试。
参考资料
reference.md
评论
支持 Markdown