2015-01-05 48 views
1

我使用基於this guide(我知道這是一個索納塔指南,但它不使用Sonata代碼)設置的選民。在symfony中禁用對象身份檢查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處理拒絕的權限。這是在日誌中:

security.DEBUG:找不到對象標識的ACL。投票拒絕訪問。 [] []

因爲我想執行拒絕來自我已經設置了security.access_decision_manager.strategyunanimous選民的到來。但由於這種方式的默認處理程序權限被拒絕。

當然,現在我可以配置並開始使用ACL,但它會在這個應用程序中矯枉過正,這就是我選擇選民的原因。

有什麼辦法可以禁用這個默認行爲嗎?

回答

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) 
    { 
    } 
} 
+0

我不知道爲什麼downvote沒有任何建議。 – fejese