【发布时间】:2016-01-03 18:55:47
【问题描述】:
我尝试更改像 here 这样的层次结构存储。我覆盖了security.role_hierarchy 服务。
服务:
services:
security.role_hierarchy:
class: AppBundle\Role\DynamicRoleHierarchy
public: false
arguments: [%security.role_hierarchy.roles%, "@=service('doctrine.orm.default_entity_manager').getRepository('AppBundle:Role')"]
动态角色层次结构:
class DynamicRoleHierarchy extends RoleHierarchy
{
/**
* Constructor.
*
* @param array $hierarchy An array defining the hierarchy
*/
public function __construct(array $hierarchy, RoleRepository $roleRepository)
{
// Actually, here I get $hierarchy from DB
$hierarchy = [
'ROLE_ADMIN' => [
'ROLE_USER'
]
];
parent::__construct($hierarchy);
}
}
此代码可以正常工作,但前提是 security.yml 中的 role_hierarchy 部分中有内容。如果有任何文本,则层次结构将起作用。例如:
// file security.yml
security:
role_hierarchy:
aaa: bbb
但是如果没有role_hierarchy 部分或者它是空的,那么层次结构就不起作用。是什么原因?
【问题讨论】:
-
您可以简单地从服务定义中删除 security.role_hierarchy.roles 参数并注入实体管理器。
-
This link 也可以帮助你