如何在Symfony3中更改角色层次结构存储?

时间:2016-01-03 18:55:48

标签: php symfony

我试图改变像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部分或者它是空的,则层次结构不起作用。是什么原因?

1 个答案:

答案 0 :(得分:3)

如果配置不包含role_hierarchy配置,则role hierarchy voter is removed。我宁愿注册一个自定义角色层次结构选民,而不是尝试替换内置角色层次结构服务(如果它与您的实现冲突,请确保删除内置角色)。