<?php
namespace MLDev\BaseBundle\Security\Voter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\NullToken;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\User\UserInterface;
class LoginAndLogoutVoter extends Voter
{
/**
* @var array
*/
private $loginAndLogoutRoutes;
/**
* LoginAndLogoutVoter constructor.
*/
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->loginAndLogoutRoutes = [
'login' => $urlGenerator->generate('mldev_base_user_login'),
'logout' => $urlGenerator->generate('mldev_base_user_logout')
];
}
protected function supports(string $attribute, $subject): bool
{
if (!$subject instanceof Request) {
return false;
}
return in_array($subject->getPathInfo(), $this->loginAndLogoutRoutes);
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
if ($token instanceof NullToken && $subject->getPathInfo() === $this->loginAndLogoutRoutes['login']) {
return true;
}
return false;
}
}