我的角色定义如下:
security:
role_hierarchy:
ROLE_PROFESSIONAL_SERVICES_MANAGER: [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_BRANCH_ASSISTANT]
当我尝试检查控制器中的权限时如下:
if($securityContext->isGranted('ROLE_PROFESSIONAL_SERVICES_MANAGER'))
返回false,因为在探查器中,权限似乎已保存,如下所示:
"ROLE_PROFESSIONAL_SERVICES_MANAGER: ROLE_USER, ROLE_SONATA_ADMIN, ROLE_BRANCH_ASSISTANT"
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
角色适用于不是应用的用户。
使用您的代码,您定义角色为ROLE_PROFFESSIONAL_SERVICES_MANAGER
的用户将拥有ROLE_USER, ROLE_SONATA_ADMIN
和ROLE_BRANCH_ASSISTANT
角色。
但现在您需要将该角色分配给用户并在该用户中签名。
当您致电$securityContext->isGranted()
时,它所做的就是从您当前登录的用户获取令牌(您可以在探查器中看到),并从令牌中检查该用户的角色。
因此,您需要让用户分配登录的适当角色。
如果您已经使用SonatAUserBundle或FOSUserBundle使用该命令轻松创建用户:bin/console fos:user:create
然后为其分配适当的角色:
app/console fos:user:promote nameOfYourUser ROLE_PROFFESSIONAL_SERVICES_MANAGER
如果您的应用没有用户管理系统,请查看此处:https://sonata-project.org/bundles/admin/master/doc/reference/security.html#user-management