在符号ACL中禁用对象身份检查



我使用我根据本指南设置的选民(我知道这是一个奏鸣曲指南,但它没有使用奏鸣曲代码)。

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

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 处理程序也会拒绝许可。这是在日志中:

安全。调试:找不到对象标识的 ACL。投票拒绝访问。[] []

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

现在我当然可以配置并开始使用 ACL,但在这个应用程序中这将是矫枉过正,这就是我选择选民的原因。

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

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

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

服务.yml

security.acl.object_identity_retrieval_strategy:
    class: AcmeUserBundleAclObjectIdentityRetrievalStrategy
security.acl.security_identity_retrieval_strategy:
    class: AcmeUserBundleAclSecurityIdentityRetrievalStrategy

Acme\UserBundle\Acl\ObjectIdentityRetrievalStrategy.php

<?php
namespace AcmeUserBundleAcl;
use SymfonyComponentSecurityAclModelObjectIdentityRetrievalStrategyInterface;
class ObjectIdentityRetrievalStrategy implements ObjectIdentityRetrievalStrategyInterface
{
    public function getObjectIdentity($domainObject)
    {
    }
}

Acme\UserBundle\Acl\SecurityIdentityRetrievalStrategy.php

<?php
namespace AcmeUserBundleAcl;
use SymfonyComponentSecurityAclModelSecurityIdentityRetrievalStrategyInterface;
use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface;
class SecurityIdentityRetrievalStrategy implements SecurityIdentityRetrievalStrategyInterface
{
    public function getSecurityIdentities(TokenInterface $token)
    {
    }
}

最新更新