src/Listener/AccessControlListener.php line 31

Open in your IDE?
  1. <?php
  2.     namespace App\Listener;
  3.     use App\Entity\AclSetting;
  4.     use App\Entity\User;
  5.     use Doctrine\ORM\EntityManagerInterface;
  6.     use Symfony\Component\HttpKernel\Event\RequestEvent;
  7.     use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  8.     use Symfony\Component\Security\Core\Security;
  9.     class AccessControlListener
  10.     {
  11.         private Security               $security;
  12.         private EntityManagerInterface $em;
  13.         public function __construct(
  14.                 Security               $security,
  15.                 EntityManagerInterface $em
  16.         )
  17.         {
  18.             $this->security $security;
  19.             $this->em       $em;
  20.         }
  21.         /**
  22.          * @param RequestEvent $event
  23.          *
  24.          * @return void
  25.          */
  26.         public function onKernelRequestRequestEvent $event )
  27.         {
  28.             $request $event->getRequest();
  29.             $route $request->attributes->get'_route' );
  30.             if ( $route === NULL ) {
  31.                 return;
  32.             }
  33.             // Récupérer l'utilisateur connecté (s'il y en a un)
  34.             $user $this->security->getUser();
  35.             if ( $user instanceof User ) {
  36.                 $allowed $this->checkAccessControl$user$route );
  37.                 if ( !$allowed ) {
  38.                     // Générer une réponse d'erreur 403 (Accès refusé)
  39.                     throw new AccessDeniedHttpException();
  40.                 }
  41.             }
  42.         }
  43.         /**
  44.          * @param User   $user
  45.          * @param string $route
  46.          *
  47.          * @return bool
  48.          */
  49.         private function checkAccessControlUser $userstring $route ): bool
  50.         {
  51.             if ( $route === 'dev_update_bdd' ) {
  52.                 return TRUE;
  53.             }
  54.             return $this->em->getRepositoryAclSetting::class )->isUserGrantedByRoute$user$route );
  55.         }
  56.     }