首页 > 解决方案 > isGranted 不适用于自定义角色名称

问题描述

我不使用像ROLE_USER. 相反,因为使用自定义 ACL 解决方案,我只使用角色名称,例如USERor ADMIN

角色以本机方式设置,Symfony 调试工具栏在 Security Token 部分下显示:

Roles   

[▼
  "ADMIN"
  "USER"
]

但是现在,如果我使用本机isGranted('ADMIN'),它总是返回 false。如何解决这个问题?我知道我可以实现自定义权限检查模型(并且确实实现了),但使用默认模型会很好,例如,它也适用于 Twig 模板(is_granted函数)。

标签: symfony

解决方案


这是因为默认投票者只支持前缀为 ROLE_ 的角色。参见 \Symfony\Component\Security\Core\Authorization\Voter\RoleVoter 的构造函数。但是您可以创建一个新的自定义选民并自己检查角色。只需制作默认 RoleVoter 的“副本”并将前缀省略即可。


推荐阅读