src/Platform/SecurityBundle/Listeners/AccountStatusListener.php line 54

Open in your IDE?
  1. <?php
  2. namespace Platform\SecurityBundle\Listeners;
  3. use Platform\SecurityBundle\Controller\LoginController;
  4. use Platform\SecurityBundle\Entity\Identity\Account;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. use Symfony\Component\Security\Core\User\UserInterface;
  12. /**
  13.  * Class AccountStatus
  14.  * @package Platform\SecurityBundle\Listeners
  15.  */
  16. final class AccountStatusListener implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var TokenStorageInterface
  20.      */
  21.     private TokenStorageInterface $storage;
  22.     /**
  23.      * @var RouterInterface
  24.      */
  25.     private RouterInterface $router;
  26.     /**
  27.      * @param TokenStorageInterface $storage
  28.      * @param RouterInterface $router
  29.      */
  30.     public function __construct(TokenStorageInterface $storageRouterInterface $router)
  31.     {
  32.         $this->storage $storage;
  33.         $this->router $router;
  34.     }
  35.     /**
  36.      * {@inheritdoc}
  37.      */
  38.     public static function getSubscribedEvents(): array
  39.     {
  40.         return [
  41.             KernelEvents::REQUEST => ['onKernelRequest'],
  42.         ];
  43.     }
  44.     /**
  45.      * @param RequestEvent $event
  46.      */
  47.     public function onKernelRequest(RequestEvent $event)
  48.     {
  49.         $token $this->storage->getToken();
  50.         // check if user was deactivated
  51.         if ($token && $token->getUser()) {
  52.             /** @var UserInterface $user */
  53.             $user $token->getUser();
  54.             /** @var Account $user */
  55.             if (($user instanceof Account) && $user->isActive() === false) {
  56.                 // reset session data (logout)
  57.                 $this->storage->setToken(null);
  58.                 $event->getRequest()->getSession()->invalidate();
  59.                 // redirect to login page
  60.                 $event->setResponse(
  61.                     new RedirectResponse(
  62.                         $this->router->generate(LoginController::ROUTES__SELECT)
  63.                     )
  64.                 );
  65.             }
  66.         }
  67.     }
  68. }