Symfony2如何禁用默认选民?

Ser*_*zzo 5 symfony

我的应用程序中有五个自定义选民,并使用策略" 共识 ".

有时我的选民不能正常工作,调试后我找到了原因.

标准Symfony RoleHierarchyVoter始终返回"1",因此"已授予 "结果的总和等于 " 拒绝 "结果的总和.所以,我需要禁用此选民,因为我不使用RoleHierarchy.

1)如何在配置中禁用Voter?

2)这个问题是否存在另一种解决方案?

非常感谢您的帮助!

更新.

所以,我创建了自己的RoleHierarchyVoter,它总是返回false.这个Voter取代了标准选民,但我不确定这个解决方案是否真实.也许还有其他解决方案

Ser*_*zzo 2

所以,目前我已经通过创建自己的 RoleHierarchyVoter解决了这个问题,它总是返回 false

目前无法删除标准 RoleHierarchyVoter 的定义,因为它以优先级 TYPE_BEFORE_OPTIMIZATION 注册并在我自己的编译器之前执行。

顺便说一句,您可以在SecurityBundle/DependencyInjection/SecurityExtension.php中找到下一行:

private function createRoleHierarchy($config, ContainerBuilder $container)
    {
        if (!isset($config['role_hierarchy'])) {
            $container->removeDefinition('security.access.role_hierarchy_voter');

            return;
        }

        $container->setParameter('security.role_hierarchy.roles', $config['role_hierarchy']);
        $container->removeDefinition('security.access.simple_role_voter');
    }
Run Code Online (Sandbox Code Playgroud)

即使我设置role_hierarchy: ~,isset($config['role_hierarchy']也会返回 true。

此问题已报告为错误https://github.com/symfony/symfony/issues/16358