2013-07-08 41 views
1

我已實現了以下選民Symfony的 - 選民總是相同的對象收到

服務定義

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

選民應用/.../ CompanyVoter.php

#... 
public function vote(TokenInterface $token, $object, array $attributes) 
{ 
    if (!($this->supportsClass(get_class($object)))) { # <- Problem here 
     return VoterInterface::ACCESS_ABSTAIN; 
    } 

    foreach ($attributes as $attribute) { 
     if (!$this->supportsAttribute($attribute)) { 
      return VoterInterface::ACCESS_ABSTAIN; 
     } 
    } 

    $user = $token->getUser(); 
    if (!($user instanceof UserInterface)) { 
     return VoterInterface::ACCESS_DENIED; 
    } 

    if ($user->getCompany() == $object->getCompany()) { 
     return VoterInterface::ACCESS_GRANTED; 
    } 

    return VoterInterface::ACCESS_ABSTAIN; 
} 
#... 

但對選民的每一個小電話(除ŧ他第一個Symfony\Component\HttpFoundation\Request)給出Application\...\CompanyVoter的實例爲$objectvote()的第二個參數)。

可能是什麼原因?

+0

HM怎樣的'supportsClass'功能看?你可以添加它嗎?在這裏跟着你的答案......我強烈懷疑你在那裏做了一些奇怪的事情......或者'get_class($ object)'已經返回字符串'... \ CompanyVoter'? – nifr

+0

'get_class($ object)'總是返回'Application \ ... \ CompanyVoter' –

回答

1

我注意到,收到的目標其實一直NULL
get_class(NULL)返回當前類。

和搜索的天后,我終於找到了where did that come from

此鏈接到SonataAdmin RoleHandler isGranted()實施。是的,我從SonataAdmin捆綁中使用我的選民。

相關問題