src/EventListener/BlockedUserListener.php line 39

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Entity\User;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
  9. use Symfony\Component\Security\Core\Security;
  10. class BlockedUserListener
  11. {
  12.     /**
  13.      * @var Security
  14.      */
  15.     private $security;
  16.     /**
  17.      * @var UrlGeneratorInterface
  18.      */
  19.     private $router;
  20.     /**
  21.      * @param Security              $security
  22.      * @param UrlGeneratorInterface $router
  23.      */
  24.     public function __construct(Security $securityUrlGeneratorInterface $router)
  25.     {
  26.         $this->router $router;
  27.         $this->security $security;
  28.     }
  29.     /**
  30.      * @param RequestEvent $event
  31.      */
  32.     public function onKernelRequest(RequestEvent $event): void
  33.     {
  34.         $request $event->getRequest();
  35.         if (\in_array($request->get('_route'), ['profile_account_blocked''user_logout'])) {
  36.             return;
  37.         }
  38.         if (!$event->isMasterRequest()
  39.             || (null === $this->security->getToken())
  40.             || ($this->security->getToken() instanceof AnonymousToken)
  41.             || !($this->security->getUser() instanceof User)) {
  42.             // don't do anything if it's not the master request
  43.             return;
  44.         }
  45.         /** @var User $user */
  46.         $user $this->security->getUser();
  47.         if (!$user->isBlocked()) {
  48.             // don't do anything if users organization is active
  49.             return;
  50.         }
  51.         $response = new RedirectResponse($this->router->generate('profile_account_blocked'));
  52.         $event->setResponse($response);
  53.     }
  54. }