我使用的是带有sonata.admin.security.handler.role
的SonataAdmin(所以这里不使用ACL)。
我正在尝试使用自定义投票者来限制对对象的访问。
服务
security.access.company_voter:
class: Application...VoterCompanyVoter
public: false
tags:
- { name: security.voter }
投票者应用程序。。。\Voter\CompanyVoter.php
#...
public function vote(TokenInterface $token, $object, array $attributes)
{
get_class($object);
}
#...
但我总是得到Application...VoterCompanyVoter
的实例,而不是要限制的预期对象。
原因是什么?
你是说Sonata在使用角色安全处理程序时不会将对象传递给isGranted()
吗?
经过数小时的搜索,我注意到收到的对象始终是NULL
(get_class(NULL)
返回当前类)。
经过几天的寻找,事实证明,与ACL处理程序相反,角色处理程序的默认实现不会将当前对象传递给isGranted()
然后我不得不延长它。
请参阅我的github期中的一段精彩独白,了解更多细节。