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

时间:2017-02-07 16:30:26

标签: symfony sonata-admin sonata-user-bundle

我的角色定义如下:

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"

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

角色适用于不是应用的用户。

使用您的代码,您定义角色为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