src/EventListener/PermissionHandler.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Module;
  4. use App\Security\LoginFormAuthenticator;
  5. use App\Services\UserPermissionManager;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpKernel\Event\RequestEvent;
  9. use Symfony\Component\Routing\RouterInterface;
  10. class PermissionHandler
  11. {
  12.     protected $entityManager;
  13.     protected $authenticator;
  14.     protected $router;
  15.     /**
  16.      * @var UserPermissionManager
  17.      */
  18.     private $permissionManager;
  19.     public function __construct(EntityManagerInterface $entityManagerLoginFormAuthenticator $authenticatorRouterInterface $routerUserPermissionManager $permissionManager)
  20.     {
  21.         $this->entityManager $entityManager;
  22.         $this->router $router;
  23.         $this->permissionManager $permissionManager;
  24.     }
  25.     public function onKernelRequest(RequestEvent $event)
  26.     {
  27.         date_default_timezone_set('Africa/Kampala');
  28.         $url $_SERVER['REQUEST_URI'];
  29.         $trimUrl explode('?'$url);
  30.         $parts explode('/'$trimUrl[0]);
  31.         $user $this->permissionManager->getUser();
  32.         if ('work-calendar' === $parts[1]) {
  33.             return true;
  34.         }
  35.         $modulePermission $this->entityManager->getRepository(Module::class)->findOneBy(['className' => $parts[1]]);
  36.         if ($modulePermission) {
  37.             $userPermissions = [];
  38.             foreach ($modulePermission->getModulePermission() as $permissionTitle) {
  39.                 foreach ($permissionTitle->getGroups() as $userPermissionGroup) {
  40.                     if ($user->getUserGroups()->contains($userPermissionGroup)) {
  41.                         foreach ($permissionTitle->getPermissions() as $userPermissionList) {
  42.                             if (!in_array($userPermissionList->getTitle(), $userPermissions)) {
  43.                                 $userPermissions[] = $userPermissionList->getTitle();
  44.                             }
  45.                         }
  46.                     }
  47.                 }
  48.             }
  49.             $getSpecificString '';
  50.             if (== count($parts)) {
  51.                 $getSpecificString $parts[3];
  52.             } elseif (== count($parts)) {
  53.                 if ('' == $parts[2]) {
  54.                     $getSpecificString '';
  55.                 } else {
  56.                     $getSpecificString $parts[2];
  57.                 }
  58.             }
  59.             switch ($getSpecificString) {
  60.                 case '':
  61.                     $permission 'Can View';
  62.                     break;
  63.                 case 'new':
  64.                     $permission 'Can Add';
  65.                     break;
  66.                 case 'show':
  67.                     $permission 'Can View';
  68.                     break;
  69.                 case 'edit':
  70.                     $permission 'Can Edit';
  71.                     break;
  72.                 case 'view':
  73.                     $permission 'Can View';
  74.                     break;
  75.                 default:
  76.                     $permission 'Can View';
  77.             }
  78.             if (!in_array($permission$userPermissions)) {
  79. //                $event->setResponse(new RedirectResponse($this->router->generate('access-denied')));
  80.             }
  81.         }
  82.         return true;
  83.     }
  84. }