Как изменить ролевую иерархию хранилища в Symfony3?

1

Я попытался изменить хранилище 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 или он пуст, то иерархия не работает. Какова причина?

  • 2
    Вы можете просто удалить параметр security.role_hierarchy.roles из определения сервиса и просто добавить менеджер сущностей.
  • 0
    Эта ссылка тоже может вам помочь
Теги:

1 ответ

2
Лучший ответ

Если config не содержит конфигурации role_hierarchy, избиратель иерархии роли удаляется. Вместо того, чтобы пытаться заменить встроенную службу иерархии ролей, я бы скорее зарегистрировал пользовательский избиратель иерархии роли (и обязательно удалите встроенный, если он противоречит вашей реализации).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню