Я попытался изменить хранилище 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
или он пуст, то иерархия не работает. Какова причина?
Если config не содержит конфигурации role_hierarchy
, избиратель иерархии роли удаляется. Вместо того, чтобы пытаться заменить встроенную службу иерархии ролей, я бы скорее зарегистрировал пользовательский избиратель иерархии роли (и обязательно удалите встроенный, если он противоречит вашей реализации).