2013-07-08 51 views
1

我使用SonataAdmin和sonata.admin.security.handler.role(所以我在這裏不使用ACL)。SonataUser - 具有角色安全的自定義選民

我試圖限制訪問一個自定義選民的對象。

服務

security.access.company_voter: 
    class:  Application\...\Voter\CompanyVoter 
    public:  false 
    tags: 
     - { name: security.voter } 

選民應用... \選民\ CompanyVoter.php

#... 
public function vote(TokenInterface $token, $object, array $attributes) 
{ 
    get_class($object); 
} 
#... 

但我總是得到的Application\...\Voter\CompanyVoter實例,而不是預期的對象來限制。

可能是什麼原因?

您是否告訴我,使用角色安全處理程序時,Sonata不會將對象傳遞給isGranted()

+0

dublicate of http://stackoverflow.com/questions/17528191/symfony-voter-always-the-same-object-received? :) – nifr

+0

相當相關,但這一個是關於SonataAdmin。另一個被問到全球更多。 –

+1

所以選民對象基本上被插入到它自己的投票方法中?對我來說這聽起來很奇怪:D你在哪裏嘗試檢查你的對象,以及究竟是怎樣的?你能提供一些關於這方面的細節嗎? – nifr

回答

1

經過幾個小時的搜索,我發現收到的對象總是NULLget_class(NULL)返回當前類)。

後尋求的日子裏,事實證明,相對於ACL的處理程序,角色處理doesn't pass當前對象的the default implementationisGranted()

我不得不然後把它擴大。

my github issue中查看一個不錯的獨白,瞭解更多詳情。