src/Listener/DtvRequestListener.php line 32

Open in your IDE?
  1. <?php
  2.     namespace App\Listener;
  3.     use App\Entity\User;
  4.     use Symfony\Component\HttpFoundation\RedirectResponse;
  5.     use Symfony\Component\HttpKernel\Event\RequestEvent;
  6.     use Symfony\Component\Routing\RouterInterface;
  7.     use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8.     class DtvRequestListener
  9.     {
  10.         private RouterInterface       $router;
  11.         private TokenStorageInterface $tokenStorage;
  12.         /**
  13.          * @param RouterInterface       $router
  14.          * @param TokenStorageInterface $tokenStorage
  15.          */
  16.         public function __constructRouterInterface $routerTokenStorageInterface $tokenStorage )
  17.         {
  18.             $this->router       $router;
  19.             $this->tokenStorage $tokenStorage;
  20.         }
  21.         /**
  22.          * @param RequestEvent $event
  23.          *
  24.          * @return void
  25.          */
  26.         public function onKernelRequestRequestEvent $event ): void
  27.         {
  28.             $currentRoute $event->getRequest()->get'_route' );
  29.             if($currentRoute && str_contains($currentRoute'dtv_back_platform'))
  30.             {
  31.                 $session $event->getRequest()->getSession();
  32.                 $project $session->get'project' );
  33.                 $safeRoute = [
  34.                         'dtv_back_platform_project_list',
  35.                         'dtv_back_platform_users',
  36.                         'dtv_back_platform_settings_delete',
  37.                         'app_login',
  38.                         'dtv_back_platform_project_log_show',
  39.                         'dtv_back_platform_project_cache_clear',
  40.                         'dtv_back_platform_project_catalogue_renew',
  41.                         'dtv_back_platform_project_log_clear',
  42.                 ];
  43.                 $routeOk array_filter$safeRoute, static function ( $v ) use ( $currentRoute ) {
  44.                     return str_contains$currentRoute$v );
  45.                 } );
  46.                 // redirection si pas de project sélectionné
  47.                 if ( $project === NULL && count$routeOk ) === ) {
  48.                     $url      $this->router->generate'dtv_back_platform_project_list' );
  49.                     $response = new RedirectResponse$url );
  50.                     $event->setResponse$response );
  51.                 }
  52.                 // redirection si viewOnly, que le user n'est pas dev et qu'il a une requete sur les pages de design et de contenu
  53.                 if ( !is_null$this->tokenStorage->getToken() ) ) {
  54.                     /** @var User $user */
  55.                     $user $this->tokenStorage->getToken()->getUser();
  56.                     // dtv_back_platform_content
  57.                     // dtv_back_platform_design
  58.                     if ( $project !== NULL &&
  59.                          $project->isViewOnly() &&
  60.                          !$user->isDeveloper() &&
  61.                          ( str_contains$currentRoute'dtv_back_platform_design' ) or str_contains$currentRoute'dtv_back_platform_content' ) )
  62.                     ) {
  63.                         $url      $this->router->generate'dtv_back_platform_project_list' );
  64.                         $response = new RedirectResponse$url );
  65.                         $event->setResponse$response );
  66.                     }
  67.                 }
  68.             }
  69.         }
  70.     }