src/EventSubscriber/Subscriber/RequestSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Subscriber;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8. use Symfony\Component\Security\Core\Security;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. class RequestSubscriber implements EventSubscriberInterface
  11. {
  12.     private $em;
  13.     private $tokenStorage;
  14.     private $security;
  15.     public function __construct(
  16.         EntityManagerInterface $em,
  17.         TokenStorageInterface $tokenStorage,
  18.         Security $security
  19.     ) {
  20.         $this->em $em;
  21.         $this->tokenStorage $tokenStorage;
  22.         $this->security $security;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             RequestEvent::class => 'onKernelRequest',
  28.         ];
  29.     }
  30.     public function onKernelRequest(RequestEvent $event)
  31.     {
  32.         /** @var User $user */
  33.         $user $this->getUser();
  34.         if ($user && !$this->security->isGranted(User::ROLE_SAAS) && method_exists($user"getSaas") && $user->getSaas() !== null) {
  35.             $filter $this->em->getFilters()->enable('saas_filter');
  36.             $filter->setParameter('saas_id'$user->getSaas()->getId());
  37.         }
  38.     }
  39.     private function getUser()
  40.     {
  41.         $token $this->tokenStorage->getToken();
  42.         if (!$token) {
  43.             return null;
  44.         }
  45.         $user $token->getUser();
  46.         if (!($user instanceof UserInterface)) {
  47.             return null;
  48.         }
  49.         return $user;
  50.     }
  51. }