В моем проекте мне нужно хранить иерархию роли в базе данных и динамически создавать новые роли.
В Symfony2 иерархия роли по умолчанию хранится в security.yml
.
Что я нашел:
Существует услуга security.role_hierarchy
(Symfony\Component\Security\Core\Role\RoleHierarchy
);
Эта служба получает массив ролей в конструкторе:
public function __construct(array $hierarchy)
{
$this->hierarchy = $hierarchy;
$this->buildRoleMap();
}
и свойство $hierarchy
является закрытым.
Этот аргумент приходит в конструкторе из \Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension::createRoleHierarchy()
который использует роли из config, как я понял:
$container->setParameter('security.role_hierarchy.roles', $config['role_hierarchy']);
Мне кажется, что лучший способ - собрать массив ролей из базы данных и установить его как аргумент для службы. Но я еще не понял, как это сделать.
Второй способ, который я вижу, - определить собственный класс RoleHierarchy
, унаследованный от базового. Но так как в базовом классе RoleHierarchy
свойство $hierarchy
определяется как личное, то мне придется переопределить все функции из базового класса RoleHierarchy
. Но я не думаю, что это хороший ООП и способ Symfony...