src/Extension/Annotations/Driver/PermissionsDriver.php line 39

Open in your IDE?
  1. <?php
  2.     namespace App\Extension\Annotations\Driver;
  3.     use App\Extension\Annotations;
  4.     use \Doctrine\Common\Annotations\PsrCachedReader;
  5.     use Symfony\Component\HttpFoundation\RedirectResponse;
  6.     use Symfony\Component\HttpFoundation\RequestStack;
  7.     use Symfony\Component\HttpKernel\Event\ControllerEvent;
  8.     use Symfony\Component\Routing\Router;
  9.     /**
  10.      * Class PermissionsDriver
  11.      * @package App\Extension\Annotations\Driver
  12.      */
  13.     class PermissionsDriver
  14.     {
  15.         /** @var PsrCachedReader $reader */
  16.         protected $reader;
  17.         /** @var \Symfony\Component\HttpFoundation\Request|null $request */
  18.         protected $request;
  19.         /** @var string $key */
  20.         protected $key;
  21.         /** @var Router $router */
  22.         protected $router;
  23.         /**
  24.          * PermissionsDriver constructor.
  25.          * @param PsrCachedReader $reader
  26.          * @param RequestStack $requestStack
  27.          * @param Router $router
  28.          * @param $key
  29.          */
  30.         public function __construct(PsrCachedReader $readerRequestStack $requestStackRouter $router$key)
  31.         {
  32.             $this->router $router;
  33.             $this->reader $reader;
  34.             $this->request $requestStack->getMasterRequest();
  35.             $this->key $key;
  36.         }
  37.         /**
  38.          * @param ControllerEvent $event
  39.          * @throws \ReflectionException
  40.          */
  41.         public function onKernelController(ControllerEvent $event)
  42.         {
  43.             if (!\is_array($controller $event->getController()))
  44.                 return;
  45.             if(empty($this->request->attributes->get('_route_params')[$this->key]))
  46.                 return;
  47.             $object = new \ReflectionObject($controller[0]);
  48.             $method $object->getMethod($controller[1]);
  49.             foreach ($this->reader->getMethodAnnotations($method) as $configuration)
  50.             {
  51.                 if($configuration instanceof Annotations\Permissions)
  52.                 {
  53.                     if(
  54.                         empty($this->request->getSession()->get('insalesId'))
  55.                         || $this->request->getSession()->get('insalesId') != $this->request->attributes->get('_route_params')[$this->key]
  56.                     )
  57.                     {
  58.                         $response = new RedirectResponse($this->router->generate('session.end'));
  59.                         $event->setController(
  60.                             function() use ($response)
  61.                             {
  62.                                 return $response;
  63.                             }
  64.                         );
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.     }