src/EventListener/ModuleAccessListerner.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  4. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpKernel\Exception\HttpException;
  7. use Symfony\Component\HttpFoundation\Response;
  8. class ModuleAccessListerner
  9. {
  10.     private $em;
  11.     private $root;
  12.     private $container;
  13.     private $user;
  14.     private $router;
  15.     public function __construct($entityManager ,$container$router)
  16.     {
  17.         $this->em $entityManager;
  18.         $this->container $container;
  19.         $this->root $this->container->get('kernel')->getRootDir() . '/../';
  20.         $this->clientPath $this->container->get('kernel')->getRootDir() . '/../';
  21.         $this->router $router;
  22.         
  23.     }
  24.     public function CheckModuleAccess(GetResponseEvent $event)
  25.     {
  26.         $request $event->getRequest();
  27.         $urlPath explode('/'trim($request->getPathInfo(),'/'));
  28.         $routeName $request->get('_route'); 
  29.         
  30.         $ignoreRouteName = [
  31.             'mon_profil_save_user',
  32.             'user_connect_modif_adresse',
  33.             'delete_adresse_user_connect',
  34.             'add_new_adresse_user_connect',
  35.             'load_adresse_user_connect',
  36.             'save_remove_img_user_connected',
  37.             'user_profil_change_password'
  38.         ];
  39.         $addActionArray = ['add','ajout','ajouter','ajouté','dupplicate','new'];
  40.         $updateActionArray = ['update','modif','modifier','modifié','save','edit'];
  41.         $deleteActionArray = ['delete','remove','supr','supprimer','supprimé'];
  42.         $otherActionArray = ['load'];
  43.         $isAccessDenied false;
  44.         // 1 - Liste
  45.         // 2 - Liste Event / Fiche
  46.         // 3 - Fiche Event
  47.         if(!$this->container->get('security.token_storage')->getToken()){
  48.             $user null;
  49.         }else{
  50.             if($this->container->get('security.token_storage')->getToken()->getUser() == 'anon.' || !$this->container->get('security.token_storage')->getToken()->getUser()){
  51.                 $user null;
  52.             }else{
  53.                 $user $this->container->get('security.token_storage')->getToken()->getUser();
  54.             }
  55.         }
  56.         
  57.         if(!in_array($routeName$ignoreRouteName) && $routeName != null){
  58.             
  59.             if($user){
  60.                 $userModule $user->getAllModules();
  61.                 
  62.                 if(count($urlPath) == 2){
  63.                     //exemple : (site-internet/evenements)
  64.                     if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['other']))
  65.                         $isAccessDenied true;
  66.                 }else if(count($urlPath) == 3){
  67.                     if($urlPath[2] == 'data'){
  68.                         //exemple : (site-internet/evenements/data)
  69.                         if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['other']))
  70.                             $isAccessDenied true;
  71.                     }else if(is_numeric($urlPath[2])){
  72.                         
  73.                         //exemple : (site-internet/evenements/{id})
  74.                         if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['view']))
  75.                             $isAccessDenied true;
  76.                     }else{
  77.                         //exemple : (site-internet/evenements/%add%)
  78.                         //exemple : (site-internet/evenements/%delete%)
  79.                         //exemple : (site-internet/evenements/%update%)
  80.                         //exemple : (site-internet/evenements/%load%)
  81.                         if((str_replace($addActionArray''$urlPath[2]) != $urlPath[2])){
  82.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['add']))
  83.                                 $isAccessDenied true;
  84.                         }else if ((str_replace($deleteActionArray''$urlPath[2]) != $urlPath[2])){
  85.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['delete']))
  86.                                 $isAccessDenied true;
  87.                         }else if ((str_replace($updateActionArray''$urlPath[2]) != $urlPath[2])){
  88.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['update']))
  89.                                 $isAccessDenied true;
  90.                         }else if ((str_replace($otherActionArray''$urlPath[2]) != $urlPath[2])){
  91.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['other']))
  92.                                 $isAccessDenied true;
  93.                         }
  94.                     }
  95.                 }else if(count($urlPath) >= 4){
  96.                     if(is_numeric($urlPath[2])){
  97.                         //exemple : (site-internet/evenements/{id}/%add%)
  98.                         //exemple : (site-internet/evenements/{id}/%delete%)
  99.                         //exemple : (site-internet/evenements/{id}/%update%)
  100.                         //exemple : (site-internet/evenements/{id}/%load%)
  101.                         if((str_replace($addActionArray''$urlPath[3]) != $urlPath[3])){
  102.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['add']))
  103.                                 $isAccessDenied true;
  104.                         }else if ((str_replace($deleteActionArray''$urlPath[3]) != $urlPath[3])){
  105.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['delete']))
  106.                                 $isAccessDenied true;
  107.                         }else if ((str_replace($updateActionArray''$urlPath[3]) != $urlPath[3])){
  108.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['update']))
  109.                                 $isAccessDenied true;
  110.                         }else if ((str_replace($otherActionArray''$urlPath[3]) != $urlPath[3])){
  111.                             
  112.                             if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['other']))
  113.                                 $isAccessDenied true;
  114.                         }
  115.                     }else if(is_numeric($urlPath[3])){
  116.                         if(isset($urlPath[4])){
  117.                             //exemple : (configuration/generale/infos-admin/{id}/%add%)
  118.                             //exemple : (configuration/generale/infos-admin/{id}/%delete%)
  119.                             //exemple : (configuration/generale/infos-admin/{id}/%update%)
  120.                             //exemple : (configuration/generale/infos-admin/{id}/%load%)
  121.                             if((str_replace($addActionArray''$urlPath[4]) != $urlPath[4])){
  122.                                 if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['add']))
  123.                                     $isAccessDenied true;
  124.         
  125.                             }else if ((str_replace($deleteActionArray''$urlPath[4]) != $urlPath[4])){
  126.         
  127.                                 if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['delete']))
  128.                                     $isAccessDenied true;
  129.         
  130.                             }else if ((str_replace($updateActionArray''$urlPath[4]) != $urlPath[4])){
  131.         
  132.                                 if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['update']))
  133.                                     $isAccessDenied true;
  134.         
  135.                             }else if ((str_replace($otherActionArray''$urlPath[4]) != $urlPath[4])){
  136.         
  137.                                 if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['other']))
  138.                                     $isAccessDenied true;
  139.         
  140.                             }
  141.                         }
  142.                     }else if($urlPath[2] == 'data'){
  143.                         //exemple : (configuration/generale/data/admins)
  144.                         if(!isset($userModule[$urlPath[0]][$urlPath[1]]['actions']['other']))
  145.                             $isAccessDenied true;
  146.                     }
  147.                     
  148.                 }
  149.             }
  150.         }
  151.         
  152.         if($isAccessDenied){
  153.             $event->setResponse(new RedirectResponse($this->router->generate('home') . '?error=module'));
  154.         }
  155.         
  156.     }
  157. }