symfony3 和 sonata 用户包中的级联角色问题



我的角色定义如下:

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_ADMINROLE_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

最新更新