在symfony ACL中禁用对象标识检查

时间:2015-01-05 12:42:04

标签: symfony acl

我使用基于this guide设置的选民(我知道它是Sonata指南,但它不使用Sonata代码)。

现在选民工作正常,他们根据需要批准拒绝。一个选民服务定义如下:

services:
    acme_account.security.authorization.organisation_voter:
        class: %acme_account.security.authorization.organisation_voter.class%
        arguments:  [@service_container]
        public: false
        tags:
          - { name: security.voter }

现在我的问题是,即使选民返回正确的授权,在某些情况下,某些默认ACL处理程序会拒绝权限。这是在日志中:

  

security.DEBUG:找不到对象标识的ACL。投票拒绝访问。 [] []

由于我想强制执行来自选民的拒绝,我已将security.access_decision_manager.strategy设置为unanimous。但是由于默认处理程序这种方式,权限被拒绝。

现在我当然可以配置并开始使用ACL,但这对于这个应用程序来说太过分了,这就是我选择选民的原因。

有没有办法禁用此默认行为?

1 个答案:

答案 0 :(得分:0)

这是一个解决方法,不确定这是否是最佳方式,但它有效。

需要用noop实现覆盖对象和安全标识检索策略服务。

<强> services.yml

security.acl.object_identity_retrieval_strategy:
    class: Acme\UserBundle\Acl\ObjectIdentityRetrievalStrategy

security.acl.security_identity_retrieval_strategy:
    class: Acme\UserBundle\Acl\SecurityIdentityRetrievalStrategy

<强>的Acme \ UserBundle \的Acl \ ObjectIdentityRetrievalStrategy.php

<?php
namespace Acme\UserBundle\Acl;

use Symfony\Component\Security\Acl\Model\ObjectIdentityRetrievalStrategyInterface;

class ObjectIdentityRetrievalStrategy implements ObjectIdentityRetrievalStrategyInterface
{
    public function getObjectIdentity($domainObject)
    {
    }
}

<强>的Acme \ UserBundle \的Acl \ SecurityIdentityRetrievalStrategy.php

<?php
namespace Acme\UserBundle\Acl;

use Symfony\Component\Security\Acl\Model\SecurityIdentityRetrievalStrategyInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;

class SecurityIdentityRetrievalStrategy implements SecurityIdentityRetrievalStrategyInterface
{
    public function getSecurityIdentities(TokenInterface $token)
    {
    }
}