src/EventSubscriber/AccessCheckSubscriber.php line 32

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\HttpKernel\Event\ControllerEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\Security\Core\Security;
  10. /**
  11.  * src: https://symfony.com/doc/current/event_dispatcher.html#event-dispatcher-before-after-filters
  12.  * 
  13.  * L'administrateur, à la création d'un nouvel utilisateur, peut créer un mot de passe,
  14.  * nous allons obliger l'utilisateur à modifier son mot de passe
  15.  */
  16. class AccessCheckSubscriber implements EventSubscriberInterface
  17. {
  18.     private $security;
  19.     private $urlGeneratorInterface;
  20.     public function __construct(
  21.         Security $security,
  22.         UrlGeneratorInterface $urlGeneratorInterface
  23.     ) {
  24.         $this->security $security;
  25.         $this->urlGeneratorInterface $urlGeneratorInterface;
  26.     }
  27.     public function onKernelController(ControllerEvent $event): void
  28.     {
  29.         $controller $event->getController();
  30.         // when a controller class defines multiple action methods, the controller
  31.         // is returned as [$controllerInstance, 'methodName']
  32.         if (is_array($controller)) 
  33.         {
  34.             $controller $controller[0];
  35.         }
  36.         $user $this->security->getUser();
  37.    
  38.         /**
  39.          * Nous allons ecouter chaque request donc s'assurer d'exclure '/entreprise/esi/all' et '/utilisateur/edit-password' pour eviter une boucle
  40.          */
  41.         $uriRequest $event->getRequest()->getRequestUri();
  42.         if ($user instanceof User && !empty($user->getFournisseur()) )
  43.         {
  44.             $data = [
  45.                 'gs/creneaux'
  46.                 'gs/fournisseurs',
  47.                 'gs/parametrage',
  48.                 'gs/conditions/mentions/legales',
  49.                 'gs/products',
  50.                 'gs/clients',
  51.                 'gs/conversations',
  52.                 'gs/remises',
  53.                 'gs/services',
  54.                 'gs/pays/livraison',
  55.                 'gs/frais',
  56.                 'gs/zone_livraison',
  57.                 'gs/categories',
  58.                 'gs/attributs',
  59.                 'gs/stocks',
  60.                 'gs/unites',
  61.                 'gs/marques',
  62.                 'gs/genres',
  63.                 'gs/classe-regroupements',
  64.                 'gs/seuils-commandes',
  65.                 'gs/search_pays',
  66.                 'gs/commandes_product/delete/photo'
  67.             ];
  68.             foreach ($data as $uri)
  69.             {
  70.                 if (strpos($uriRequest$uri) !== false)
  71.                 {
  72.                     $event->stopPropagation();
  73.                     $event->setController(function() 
  74.                     {
  75.                         $url $this->urlGeneratorInterface->generate('app_gs_home');
  76.         
  77.                         return new RedirectResponse($url);
  78.                     });
  79.                     break;
  80.                 }
  81.             }
  82.             
  83.         }
  84.     }
  85.     public static function getSubscribedEvents(): array
  86.     {
  87.         return [
  88.             KernelEvents::CONTROLLER => 'onKernelController',
  89.         ];
  90.     }
  91. }