src/EventListener/AccessListener.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  4. use Symfony\Component\Routing\RouterInterface;
  5. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  6. use Symfony\Component\Security\Core\Security;
  7. /**
  8.  * Access Controller Listener
  9.  */
  10. class AccessListener
  11. {
  12.     /** @var RouterInterface $router */
  13.     protected $router;
  14.     /** @var Security $security */
  15.     protected $security;
  16.     public function __construct(RouterInterface $routerSecurity $security)
  17.     {
  18.         $this->router $router;
  19.         $this->security $security;
  20.     }
  21.     public function onAccessController(ControllerEvent $event)
  22.     {
  23.         $request $event->getRequest();
  24.         // https://symfony.com/doc/current/routing.html#getting-the-route-name-and-parameters
  25.         $routeName $request->attributes->get('_route');
  26.         $routeCollec $this->router->getRouteCollection();
  27.         $activeRoute $routeCollec->get($routeName ?? '');
  28.         if ($activeRoute) {
  29.             $roles $activeRoute->getRequirements();
  30.             if (isset($roles['role'])) {
  31.                 if (false === $this->security->isGranted($roles['role'])) {
  32.                     throw new AccessDeniedException();
  33.                 }
  34.             }
  35.         }
  36.     }
  37. }