Symfony 4 Voter Verify Пользователь полностью аутентифицирован - PullRequest
0 голосов
/ 11 сентября 2018

Есть ли более простой способ (или просто лучшая альтернатива), чем при проверке избирателей, чтобы убедиться, что пользователь действительно вошел в систему?

Пример:

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;
}

Проблема I 'm Имеющий вытекает из $token->getUser() возвращает строку, когда пользователь anon.а не фактическая сущность пользователя.

Это довольно легко сделать в контроллере с помощью $this->isGranted('IS_AUTHENTICATED_FULLY') Я просто чувствую, что мне не хватает чего-то подобного, что может быть сделано внутри избирателей.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете ввести 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;
        }
        // ...
    }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...