<?php
namespace App\EventSubscriber;
use App\Entity\User;
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\Security;
class BanLogoutSubscriber implements EventSubscriberInterface
{
public function __construct(
private Security $security,
private RouterInterface $router
) {}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'logoutBannedUser',
];
}
public function logoutBannedUser(RequestEvent $requestEvent): void
{
/** @var User $user */
$user = $this->security->getUser();
if($user && $user instanceof User && $user->isBanned()) {
$requestEvent->setResponse(new RedirectResponse($this->router->generate('logout')));
}
}
}