我试图改变像here这样的hieharchy存储。我凌驾于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')"]
DynamicRoleHierarchy:
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
部分或者它是空的,则层次结构不起作用。是什么原因?
答案 0 :(得分:3)
如果配置不包含role_hierarchy
配置,则role hierarchy voter is removed。我宁愿注册一个自定义角色层次结构选民,而不是尝试替换内置角色层次结构服务(如果它与您的实现冲突,请确保删除内置角色)。