我已实施以下选民
服务定义
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
的实例设为$object
(vote()
的第二个参数)。
可能是什么原因?
答案 0 :(得分:1)
我注意到收到的对象实际上总是NULL
get_class(NULL)
返回当前的类。
经过几天的搜索,我终于找到了where did that come from。
这与SonataAdmin RoleHandler isGranted()
实现相关联。是的,我正在使用SonataAdmin捆绑包中的选民。