src/EventSubscriber/RedirectUserSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Helper\UserHelper;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\HttpKernelInterface;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Routing\RouterInterface as Router;
  11. use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException;
  12. use Symfony\Component\Security\Core\Security;
  13. class RedirectUserSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var Security $security
  17.      */
  18.     public $security;
  19.     /**
  20.      * @var Router $router
  21.      */
  22.     public $router;
  23.     /**
  24.      * @var string $passwordPolicyDeadline
  25.      */
  26.     private string $passwordPolicyDeadline;
  27.     public function __construct(Security $securityRouter $routerstring $passwordPolicyDeadline)
  28.     {
  29.         $this->security $security;
  30.         $this->router $router;
  31.         $this->passwordPolicyDeadline $passwordPolicyDeadline;
  32.     }
  33.     public function onKernelRequest(RequestEvent $event): void
  34.     {
  35.         $route $event->getRequest()->get('_route');
  36.         $type $event->getRequestType();
  37.         try {
  38.             if (HttpKernelInterface::MAIN_REQUEST === $type) {
  39.                 /** @var User $user */
  40.                 if ($user $this->security->getUser()) {
  41.                     $allowedRoutes = ['first_login''update_password''user_profile''supplier_profile''app_logout''app_reset_password''app_forgot_password_request'];
  42.                     $passwordPolicyDeadline = new \DateTime($this->passwordPolicyDeadline);
  43.                     $now = new \DateTime();
  44.                     if ($now >= $passwordPolicyDeadline && !$user->isPasswordUpdatedForNewPolicy() && !in_array($route$allowedRoutes)) {
  45.                         $event->setResponse(new RedirectResponse($this->router->generate('update_password')));
  46.                         return;
  47.                     }
  48.                     if (!$user->isSecured() && $route !== 'first_login') {
  49.                         $event->setResponse(new RedirectResponse($this->router->generate('first_login')));
  50.                         return;
  51.                     }
  52.                 }
  53.                 $isAdmin $this->security->isGranted('ROLE_ADMIN');
  54.                 $isUser $this->security->isGranted('ROLE_USER');
  55.                 if (($isAdmin || $isUser) && $route == 'fos_user_security_login') {
  56.                     $event->setResponse(new RedirectResponse($this->router->generate('dashboard')));
  57.                 }
  58.             }
  59.         } catch (AuthenticationCredentialsNotFoundException $e) {
  60.         }
  61.     }
  62.     public static function getSubscribedEvents(): array
  63.     {
  64.         return [
  65.             KernelEvents::REQUEST => 'onKernelRequest',
  66.         ];
  67.     }
  68. }