【问题标题】:How to change role hierarchy storage in Symfony3?如何更改 Symfony3 中的角色层次结构存储?
【发布时间】:2016-01-03 18:55:47
【问题描述】:

我尝试更改像 here 这样的层次结构存储。我覆盖了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')"]

动态角色层次结构:

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 部分或者它是空的,那么层次结构就不起作用。是什么原因?

【问题讨论】:

  • 您可以简单地从服务定义中删除 security.role_hierarchy.roles 参数并注入实体管理器。
  • This link 也可以帮助你

标签: php symfony


【解决方案1】:

如果配置不包含role_hierarchy 配置,则role hierarchy voter is removed。与其尝试替换内置的角色层次服务,我更愿意注册一个自定义角色层次投票器(如果它与您的实现冲突,请确保删除内置的投票器)。

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2020-03-17
    • 2010-11-19
    • 2012-06-16
    • 2016-10-29
    • 2020-10-09
    • 2017-12-27
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多