src/DoctrineFilter/CustomerFilterEventSubscriber.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\DoctrineFilter;
  3. use App\Security\User;
  4. use App\V4\Security\AuthenticationManager;
  5. use Doctrine\DBAL\Types\Types;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpKernel\Event\KernelEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. class CustomerFilterEventSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var AuthenticationManager
  15.      */
  16.     private $authenticationManager;
  17.     /**
  18.      * @var EntityManagerInterface
  19.      */
  20.     private $entityManager;
  21.     public function __construct(AuthenticationManager $authenticationManagerEntityManagerInterface $entityManager)
  22.     {
  23.         $this->authenticationManager $authenticationManager;
  24.         $this->entityManager $entityManager;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             KernelEvents::REQUEST => ['onKernelRequest'7],
  30.         ];
  31.     }
  32.     public function onKernelRequest(KernelEvent $event): void
  33.     {
  34.         $filters $this->entityManager->getFilters();
  35.         $user $this->authenticationManager->getLoggedInUser();
  36.         if (!$user instanceof User) {
  37.             return;
  38.         }
  39.         $filters
  40.             ->getFilter('customer_filter')
  41.             ->setParameter('customer_id'$this->getCustomerId($user$event->getRequest()), Types::TEXT)
  42.         ;
  43.     }
  44.     private function getCustomerId(User $userRequest $request): string
  45.     {
  46.         $isSuperAdmin in_array('ROLE_SUPERADMIN'$user->getRoles(), true);
  47.         if (!$isSuperAdmin) {
  48.             return $user->getCustomerId();
  49.         }
  50.         $customerId $request->query->get('customer_id');
  51.         if (null !== $customerId) {
  52.             return $customerId;
  53.         }
  54.         $customerId $request->query->get('customerId');
  55.         if (null !== $customerId) {
  56.             return $customerId;
  57.         }
  58.         $requestContent json_decode($request->getContent(), true);
  59.         if (is_array($requestContent)) {
  60.             if (isset($requestContent['customer_id'])) {
  61.                 return $requestContent['customer_id'];
  62.             }
  63.             if (isset($requestContent['customerId'])) {
  64.                 return $requestContent['customerId'];
  65.             }
  66.         }
  67.         return $user->getCustomerId();
  68.     }
  69. }