Symfony2如何禁用默认投票者?
在我的应用程序和使用策略“共识”中,我有五个自定义投票者 有时我的投票者工作不正常,调试后我找到了原因 标准Symfony RoleHierarchyVoter始终返回“1”,因此“已授予的”结果之和等于“拒绝”结果之和。所以,我需要禁用这个投票人,因为我不使用角色管理 1)如何在配置中禁用投票者? 2)是否存在解决此问题的其他解决方案? 非常感谢你的帮助 已更新。 所以,我创建了自己的RoleHierarchyVoter,它总是返回false。 这个投票者取代了标准投票者,但我不确定这个解决方案是否正确。Symfony2如何禁用默认投票者?,symfony,Symfony,在我的应用程序和使用策略“共识”中,我有五个自定义投票者 有时我的投票者工作不正常,调试后我找到了原因 标准Symfony RoleHierarchyVoter始终返回“1”,因此“已授予的”结果之和等于“拒绝”结果之和。所以,我需要禁用这个投票人,因为我不使用角色管理 1)如何在配置中禁用投票者? 2)是否存在解决此问题的其他解决方案? 非常感谢你的帮助 已更新。 所以,我创建了自己的RoleHierarchyVoter,它总是返回false。 这个投票者取代了标准投票者,但我不确定这个解决方
可能还有其他解决方案吗?因此,目前我通过创建自己的RoleHierarchyVoter解决了这个问题,它总是返回false 目前无法删除标准RoleHierarchyVoter的定义,因为它在优化前已注册为优先级类型_,并在我自己的编译器之前执行 顺便说一句,您可以在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');
}
即使我设置了role\u hierarchy:~
,isset($config['role\u hierarchy']
也会返回true
本期已报告为缺陷RoleVoter的文档说明:
RoleVoter votes if any attribute starts with a given prefix.
RoleVoter
将检查的默认前缀是ROLE\uquot>,在构造函数中作为默认参数值传递。这些是必需的,因为投票者必须检查当前登录的用户
确保您自己的投票者实现了VoterInterface
,并检查投票者对YourVorter::supportsClass
的实现。您想知道用户有权访问的元素的FQN应该在那里检查。然后,以下配置就足够了:
app.security.download_voter:
class: AppBundle\Security\Voter\DownloadVoter
public: false
tags:
- { name: security.voter }
因此:
1) 您不应禁用此投票者,因为所有其他投票者在通过投票时都依赖于此投票者为当前用户创建的角色层次结构
2) 为了更好地了解投票者
,您可以让驾驶员信息中心将记录器
插入您的投票者
,并向档案器添加额外信息。这样,您自己的投票者就不再是一个黑匣子。您可以查看编译器通过情况以完全删除该服务。这看起来像是一种奇怪的默认行为。@Cerad请告诉我,可能是我安装FOSUserBundle的原因吗?不知道。我没有执行协商一致战略。我只知道您可以使用pass来修改服务定义。我远离FOSUserBundle。顺便说一句,我已经将其添加为bug报告,目前无法删除RoleHierarchyVoter的定义,因为它在优化之前已注册为优先级类型_,并在编译器之前执行。谢谢您的回答,但这与我所问的有所不同。我无法禁用RoleHierarchyVoter的原因,我在回答这个问题时已经描述过。你能给我一个链接吗?从这里我可以读到“所有其他选民都依赖RoleHierarchy…”?用户
是被授予
的强制参数,这就是为什么总是首先执行RoleHierarchyVoter
。作为第二个参数传递给的是什么?它应该是一个实现UserInterface
的实体。顺便说一句,几天前我已经解决了这个问题,为此我不得不探索SecurityBundle的来源。问题是,当我在security.yml中设置role\u hierarchy:~
时,条件isset($config['role\u hierarchy'])
无论如何都会返回true,即使它包含空数组。这是臭虫,我已经报告了。