src/EventSubscriber/BuildingFilterSubscriber.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\Security\Core\Security;
  7. use App\Entity\Admin;
  8. readonly class BuildingFilterSubscriber implements EventSubscriberInterface
  9. {
  10.     public function __construct(
  11.         private EntityManagerInterface $em,
  12.         private Security               $security
  13.     ) {}
  14.     public function onKernelRequest(RequestEvent $event): void
  15.     {
  16.         // Solo para la petición principal (master/main request)
  17.         if (!$event->isMainRequest()) {
  18.             return;
  19.         }
  20.         $user $this->security->getUser();
  21.         if (!$user instanceof Admin) {
  22.             return;
  23.         }
  24.         $buildingsIds $user->getBuildingsIds();
  25.         if (empty($buildingsIds)) {
  26.             return;
  27.         }
  28.         // Se habilita el filtro y se configura el parámetro como una cadena separada por comas.
  29.         $filter $this->em->getFilters()->enable('building_filter');
  30.         $filter->setParameter('allowed_buildings'implode(','$buildingsIds));
  31.     }
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             'kernel.request' => 'onKernelRequest'
  36.         ];
  37.     }
  38. }