我正在使用symfony投票来处理我网站上的用户访问权限。 当用户未经过身份验证时,我收到错误:
Warning: get_class() expects parameter 1 to be object, string given
当用户访问调用选民的页面时。 选民中的代码解决了这个问题:
public function vote(TokenInterface $token, $object, array $attributes)
{
if (!$object || !$this->supportsClass(get_class($object))) {
return self::ACCESS_ABSTAIN;
}
...}
当对象='anon'时。这是从symfony网站获取的常规代码。 我当然可以修改这段代码来检查对象是否是一个对象,但我想知道这是否正常?我会跳过不会在非对象上调用选民。
编辑: SuportsClass和SupportsAttribute也是默认值:
protected function getSupportedClasses()
{
return array(
'AppBundle\Entity\User\Associate',
);
}
protected function getSupportedAttributes()
{
return array(self::SELECT_ASSOCIATES, self::GRANT_RIGHTS, self::REMOVE_RIGHT, self::DISPLAY_RIGHTS);
}
答案 0 :(得分:1)
当用户未登录但访问控制允许匿名用户时,该用户是字符串“anon”。而不是UserInterface实例。
您应该检查supportsClass
(例如return is_object($objec);
)。