src/App/EventListener/UserRoleListener.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Controller\User\Me\RoleController;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  6. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  7. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  8. class UserRoleListener
  9. {
  10.     private AuthorizationCheckerInterface $authorizationChecker;
  11.     private TokenStorageInterface $tokenStorage;
  12.     public function __construct(
  13.         AuthorizationCheckerInterface $authorizationChecker,
  14.         TokenStorageInterface $tokenStorage
  15.     ) {
  16.         $this->authorizationChecker $authorizationChecker;
  17.         $this->tokenStorage $tokenStorage;
  18.     }
  19.     public function __invoke(RequestEvent $event)
  20.     {
  21.         $request $event->getRequest();
  22.         if ('/api/app/supplier-requests' == $request->server->get('REQUEST_URI')) {
  23.             return;
  24.         }
  25.         if ('/api/user/me/forgot-password' == $request->server->get('REQUEST_URI')) {
  26.             return;
  27.         }
  28.         if (
  29.             null === $this->tokenStorage->getToken() ||
  30.             !$this->tokenStorage->getToken()->isAuthenticated()
  31.         ) {
  32.             return;
  33.         }
  34.         if (RoleController::class === $request->attributes->get('_controller')) {
  35.             return;
  36.         }
  37.         if (!$request->headers->has('x-user-role')) {
  38.             throw new AccessDeniedHttpException();
  39.         }
  40.         $authorizationCheck $this->authorizationChecker
  41.             ->isGranted($request->headers->get('x-user-role'));
  42.         if (!$authorizationCheck) {
  43.             throw new AccessDeniedHttpException();
  44.         }
  45.         $request->attributes->set('userRole'$request->headers->get('x-user-role'));
  46.     }
  47. }