Symfony,FOSUserBundle:检索所有静态和动态角色

时间:2016-04-19 10:09:32

标签: symfony fosuserbundle

使用FOSUserBundle我有两个地方可以定义用户角色:用户实体(DB,动态)中的security.yml(静态)和每roles属性。如何为用户(也是继承的)检索所有角色的完整列表?

实施例

security:
    role_hierarchy:
        ROLE_ADMIN:       [ROLE_USER]
        ROLE_SUPERADMIN:  [ROLE_ADMIN]
        ROLE_SUPERDUPERADMIN: [ROLE_SUPERADMIN]

用户角色(实体):
[ROLE_BOARDMODERATOR, ROLE_CHATMODEARTOR, ROLE_ADMIN]

结果必须是这样的:
[ROLE_USER, ROLE_ADMIN, ROLE_BOARDMODERATOR, ROLE_CHATMODERATOR]

1 个答案:

答案 0 :(得分:2)

从Symfony Profiler检查安全面板我制定了以下解决方案(Symfony 3):

//retrieve dynamic roles and the last static role
$endRoles = $this->get('security.token_storage')->getToken()->getRoles();
//add all inherited roles
$allRoles = array_unique($this->get('security.role_hierarchy')->getReachableRoles($endRoles), SORT_REGULAR);