我的角色定义如下:
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"
有人知道我该如何解决这个问题吗?
角色适用于用户,而不是应用。
使用代码,您可以定义具有角色 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