在
供应商/ symfony的/ symfony的/ SRC / Symfony的/捆绑/ SecurityBundle /资源/配置/ security.xml文件
<service id="security.access.role_hierarchy_voter" class="%security.access.role_hierarchy_voter.class%" public="false">
<argument type="service" id="security.role_hierarchy" />
<tag name="security.voter" priority="245" />
</service>
已定义。服务类Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter
有第二个参数$prefix = 'ROLE_'
作为默认值。
在上面的服务定义中,没有传递第二个参数,因此它将采用默认值ROLE_
在我的应用程序中,我有遗留角色,例如登录。没有ROLE_
前缀的。
我想覆盖上面的服务定义并将第二个参数传递给空。
<service id="security.access.role_hierarchy_voter" class="%security.access.role_hierarchy_voter.class%" public="false">
<argument type="service" id="security.role_hierarchy" />
<argument></argument>
<tag name="security.voter" priority="245" />
</service>
我该怎么做?
答案 0 :(得分:2)
您可以创建一个扩展Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter
的新类。
在您创建的类中,前缀在您的控制之下,您只需更改构造函数方法即可。
代码:
public function __construct(RoleHierarchyInterface $roleHierarchy)
{
parent::__construct($roleHierarchy, 'THE_PREFIX_YOU_WANT_TO_SET');
}
然后将参数security.access.role_hierarchy_voter.class
设置为您创建的类。
编辑:
使用空字符串设置前缀可能会导致警告,覆盖RoleVoter
&#39; s supportAttribute
是另一种解决方案。