<?php
namespace App\EventSubscriber;
use App\Entity\BackUser;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
class SecuritySubscriber implements EventSubscriberInterface
{
/**
* UpdatePageSubscriber constructor.
*/
public function __construct(
private UsageTrackingTokenStorage $tokenStorage,
private RouterInterface $router
) {
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if ($this->tokenStorage->getToken() && $this->tokenStorage->getToken()->getUser() && 'anon.' != $this->tokenStorage->getToken()->getUser()) {
$user = $this->tokenStorage->getToken()->getUser();
if (!$user->getEnabled() && !in_array($request->attributes->get('_route'), ['back_security_logout', 'front_security_logout'])) {
$event->setResponse(new RedirectResponse($this->router->generate($user instanceof BackUser ? 'back_security_logout' : 'front_security_logout')));
}
}
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => [['onKernelRequest', 1]],
];
}
}