Symfony 2覆盖config中的现有服务定义?

时间:2014-03-05 13:52:27

标签: php symfony fosuserbundle

供应商/ 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>

我该怎么做?

1 个答案:

答案 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是另一种解决方案。