<?php
namespace App\EventListener;
use Doctrine\ORM\EntityManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class BeforeRequestEventSubscriber implements EventSubscriberInterface
{
public function __construct(protected EntityManager $em, protected TokenStorageInterface $tokenStorage) {}
public function onKernelRequest(RequestEvent $event)
{
$this->em->getFilters()->enable('AssignmentFutureOnlyFilter');
$this->em->getFilters()->enable('AssignmentNotInactiveFilter');
$this->em->getFilters()->enable('VesselAvailableOnlyFilter');
$user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
if ($user) {
$own_only_filter = $this->em->getFilters()->enable('OwnOnlyFilter');
$own_only_filter->setParameter('userid', $user->getId());
$own_only_filter->setParameter('is_admin', in_array('ROLE_ADMIN', $user->getRoles()));
}
}
/**
* @return array<string, mixed>
*/
public static function getSubscribedEvents(): array
{
return [KernelEvents::REQUEST => 'onKernelRequest'];
}
}