src/EventSubscriber/RgpdUserSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. use Symfony\Component\Routing\RouterInterface;
  9. use Symfony\Component\Security\Core\Security;
  10. use Symfony\Contracts\Service\Attribute\Required;
  11. /**
  12.  * Si l'utilisateur connecté, on le redirige vers la page RGPD tant qu'il ne la pas accepté.
  13.  *
  14.  * @package App\EventSubscriber
  15.  */
  16. class RgpdUserSubscriber implements EventSubscriberInterface
  17. {
  18.     #[Required]
  19.     public Security $security;
  20.     #[Required]
  21.     public RouterInterface $router;
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [
  25.             KernelEvents::CONTROLLER => 'onKernelController',
  26.         ];
  27.     }
  28.     public function onKernelController(ControllerEvent $event)
  29.     {
  30.         if ($event->isMainRequest()) {
  31.             $controller $event->getController();
  32.             if (is_array($controller) && isset($controller[1]) && $controller[1] != 'checkRGPD') {
  33.                 /** @var User $user */
  34.                 $user $this->security->getUser();
  35.                 // Si je suis connecté en tant que Conseiller ou EPCI, et que je n'ai pas déjà validé mon RPGD, je suis redir
  36.                 if ($user && $user->getLastRgpdValidation() === null) {
  37.                     $rgpdRoute $this->router->generate('check_rgpd');
  38.                     $event->setController(function () use ($rgpdRoute) {
  39.                         return new RedirectResponse($rgpdRoute);
  40.                     });
  41.                 }
  42.             }
  43.         }
  44.     }
  45. }