Symfony 4 选民验证用户已完全通过身份验证
Symfony 4 Voter Verify User is Fully Authenticated
在进行选民检查以验证用户是否实际登录时,是否有更简单的方法(或更好的替代方法)?
示例:
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
switch ($attribute) {
case self::VIEW:
return $this->canView($subject, $token);
case self::EDIT:
return $this->canEdit($subject, $token);
case self::CREATE:
return $this->canCreate($token);
}
}
/**
* @param TokenInterface $token
* @return bool
*/
private function canCreate(TokenInterface $token)
{
if (!$token->getUser() instanceof User)
{
return false;
}
if ($token->getUser()->isEnabled() && !$token->getUser()->isFreeze())
{
return true;
}
return false;
}
我遇到的问题源于 $token->getUser()
returns 用户匿名时的字符串。而不是实际的用户实体。
这在控制器中很容易完成 $this->isGranted('IS_AUTHENTICATED_FULLY')
我只是觉得我错过了可以在选民中完成的类似事情。
您可以将 AuthorizationChecker 注入投票器,然后执行 isGranted()
-check。
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class MyVoter
{
private $authChecker;
public function __construct(AuthorizationCheckerInterface $authChecker)
{
$this->authChecker = $authChecker;
}
private function canCreate(TokenInterface $token)
{
if (!$this->authChecker->isGranted('IS_FULLY_AUTHENTICATED')) {
return false;
}
// ...
}
}
在进行选民检查以验证用户是否实际登录时,是否有更简单的方法(或更好的替代方法)?
示例:
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
switch ($attribute) {
case self::VIEW:
return $this->canView($subject, $token);
case self::EDIT:
return $this->canEdit($subject, $token);
case self::CREATE:
return $this->canCreate($token);
}
}
/**
* @param TokenInterface $token
* @return bool
*/
private function canCreate(TokenInterface $token)
{
if (!$token->getUser() instanceof User)
{
return false;
}
if ($token->getUser()->isEnabled() && !$token->getUser()->isFreeze())
{
return true;
}
return false;
}
我遇到的问题源于 $token->getUser()
returns 用户匿名时的字符串。而不是实际的用户实体。
这在控制器中很容易完成 $this->isGranted('IS_AUTHENTICATED_FULLY')
我只是觉得我错过了可以在选民中完成的类似事情。
您可以将 AuthorizationChecker 注入投票器,然后执行 isGranted()
-check。
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class MyVoter
{
private $authChecker;
public function __construct(AuthorizationCheckerInterface $authChecker)
{
$this->authChecker = $authChecker;
}
private function canCreate(TokenInterface $token)
{
if (!$this->authChecker->isGranted('IS_FULLY_AUTHENTICATED')) {
return false;
}
// ...
}
}