在 symfony ACL 中禁用对象身份检查

Posted

技术标签:

【中文标题】在 symfony ACL 中禁用对象身份检查【英文标题】:Disable object identity check in symfony ACL 【发布时间】:2015-01-05 12:42:04 【问题描述】:

我使用基于this guide 设置的选民(我知道这是奏鸣曲指南,但它没有使用奏鸣曲代码)。

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

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】:

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

需要用 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)
    
    

【讨论】:

以上是关于在 symfony ACL 中禁用对象身份检查的主要内容,如果未能解决你的问题,请参考以下文章

symfony2 选民或 acl

如何通过伪造登录来测试 Symfony 2 中的 ACL

为啥 Symfony2 ACL 使用用户名而不是 ID?

在 Php/symfony 中检查用户身份验证

如何使用 Symfony ACL 过滤我的 Doctrine 查询

Symfony2 ACL 问题