src/EventSubscriber/AccountBanned.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Exception;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  11. use Symfony\Component\Security\Core\Security;
  12. class AccountBanned implements EventSubscriberInterface
  13. {
  14.     private $router;
  15.     private $security;
  16.     public function __construct(RouterInterface $routerSecurity $security)
  17.     {
  18.         $this->router $router;
  19.         $this->security $security;
  20.     }
  21.     public function onKernelResponse(ResponseEvent $event)
  22.     {
  23.         /** @var User $user */
  24.         $user $this->security->getUser();
  25.         // On vérifie si l'utilisateur est connecté et si son compte est activé
  26.         if ($user && $user->getStatus() == "banned") {
  27.             $route 'user_logout';
  28.             if ($route === $event->getRequest()->get('_route')
  29.                 || 'user_welcome' === $event->getRequest()->get('_route')
  30.                 || 'user_login' === $event->getRequest()->get('_route')
  31.             ) {
  32.                 return;
  33.             }
  34.             $url $this->router->generate($route);
  35.             $response = new RedirectResponse($url);
  36.             $event->setResponse($response);
  37.         }
  38.     }
  39.     public static function getSubscribedEvents()
  40.     {
  41.         return [
  42.             // On doit définir une priorité élevée
  43.             KernelEvents::RESPONSE => [['onKernelResponse'20]],
  44.         ];
  45.     }
  46. }