Symfony - Voter总是收到相同的对象

时间:2013-07-08 13:42:06

标签: security symfony symfony-security

我已实施以下选民

服务定义

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()的第二个参数)。

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

我注意到收到的对象实际上总是NULL get_class(NULL)返回当前的类。

经过几天的搜索,我终于找到了where did that come from

这与SonataAdmin RoleHandler isGranted()实现相关联。是的,我正在使用SonataAdmin捆绑包中的选民。