src/Security/UserPermissionsListener.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\User;
  4. use App\Utils\UserPermissionsHelper;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. use Symfony\Component\HttpKernel\Event\KernelEvent;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. class UserPermissionsListener
  12. {
  13.     /**
  14.      * @var SessionInterface
  15.      */
  16.     private $session;
  17.     /**
  18.      * @var EntityManagerInterface
  19.      */
  20.     private $em;
  21.     /**
  22.      * @var UserPermissionsHelper
  23.      */
  24.     private $userPermissionsHelper;
  25.     /**
  26.      * @var TokenStorageInterface
  27.      */
  28.     private $tokenStorage;
  29.     /**
  30.      * @var RouterInterface
  31.      */
  32.     private $router;
  33.     private $userPermissionsRoutes;
  34.     public function __construct(
  35.         SessionInterface $session,
  36.         EntityManagerInterface $em,
  37.         UserPermissionsHelper $userPermissionsHelper,
  38.         TokenStorageInterface $tokenStorage,
  39.         RouterInterface $router,
  40.         $userPermissionsRoutes
  41.     ) {
  42.         $this->session $session;
  43.         $this->em $em;
  44.         $this->userPermissionsHelper $userPermissionsHelper;
  45.         $this->tokenStorage $tokenStorage;
  46.         $this->router $router;
  47.         $this->userPermissionsRoutes $userPermissionsRoutes;
  48.     }
  49.     public function preExecute(KernelEvent $event)
  50.     {
  51.         $currentRoute $event->getRequest()->get('_route');
  52.         $protectedRoutes $this->userPermissionsRoutes;
  53.         $permissionNeeded null;
  54.         foreach ($protectedRoutes as $protectedRoute) {
  55.             foreach ($protectedRoute as $key => $v) {
  56.                 if(in_array($currentRoute$v['urls'])) {
  57.                     $permissionNeeded $key;
  58.                 }
  59.             }
  60.         }
  61.         if (empty($permissionNeeded)) {
  62.             return true;
  63.         }
  64.         /** @var User $user */
  65.         $vbxUser $this->tokenStorage->getToken()->getUser()->getId();
  66.         $hasPermission $this->userPermissionsHelper->userHasPermission($vbxUser$permissionNeeded);
  67.         if (!$hasPermission) {
  68.             switch ($event->getRequest()->getRealMethod()) {
  69.                 case "GET":
  70.                     $this->session->getFlashBag()->add('danger'"Oops! You don't have the User permissions needed to access this. Please contact your manager to update.");
  71.                     $event->setController(function () {
  72.                         return new RedirectResponse($this->router->generate('app_rapoarte_management'));
  73.                     });
  74.                     break;
  75. //                case "POST":
  76. //                    $event->setController(function () {
  77. //                        return new JsonResponse(["error" => true, "message" => "Oops! You are not allowed to perform this action. Please contact your manager to update"]);
  78. //                    });
  79. //                    break;
  80. //                default:
  81. //                    $event->setController(function () {
  82. //                        throw new UnauthorizedHttpException("You are not allowed to access this section.");
  83. //                    });
  84. //                    break;
  85.             }
  86.         }
  87.         return true;
  88.     }
  89. }