使用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]
答案 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);