src/EventSubscriber/AccessCheckSubscriber.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Utils\RequestHelper;
  4. use App\Domain\Payload\Error;
  5. use App\Exception\ApiException;
  6. use App\Domain\Payload\Payload;
  7. use App\Exception\ApiExceptionInterface;
  8. use App\Domain\Exception\Restrict\RestrictException;
  9. use App\Services\RoutePermissions\RoutePermissionValidator;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  12. class AccessCheckSubscriber implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var RoutePermissionValidator
  16.      */
  17.     private $permissionValidator;
  18.     /**
  19.      * @var RequestHelper
  20.      */
  21.     private $requestHelper;
  22.     public function __construct(RoutePermissionValidator $permissionValidatorRequestHelper $requestHelper)
  23.     {
  24.         $this->permissionValidator $permissionValidator;
  25.         $this->requestHelper $requestHelper;
  26.     }
  27.     /**
  28.      * @throws RestrictException|ApiExceptionInterface
  29.      */
  30.     public function onController(ControllerEvent $event): void
  31.     {
  32.         $givenRoute $event->getRequest()->getPathInfo();
  33.         if (!$this->permissionValidator->validate($givenRoute)) {
  34.             if ($this->requestHelper->isV1Route()) {
  35.                 throw new RestrictException('No permissions to access this endpoint');
  36.             }
  37.             $payload = new Payload();
  38.             $payload->setError(new Error(0'No permissions to access this endpoint'));
  39.             throw ApiException::createForbiddenException($payload);
  40.         }
  41.     }
  42.     public static function getSubscribedEvents(): array
  43.     {
  44.         return [
  45.             'kernel.controller' => ['onController'1],
  46.         ];
  47.     }
  48. }