src/EventSubscriber/CurrentUserSubscriber.php line 71

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventSubscriber;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Harmonizely\Model\UserInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. final class CurrentUserSubscriber implements EventSubscriberInterface
  11. {
  12.     private $tokenStorage;
  13.     private $entityManager;
  14.     private const ROUTES_IGNORE_THIS_FILTER = [
  15.         'panel.api.event_type.list',
  16.         'panel.api.poll.create',
  17.         'panel.api.poll.list',
  18.         'panel.api.availability_rule',
  19.         'panel.api.poll.get',
  20.         'panel.api.event.edit',
  21.         'panel.api.event.no_show.list',
  22.         'panel.api.chart.list_status',
  23.         'panel.api.chart.status',
  24.         'panel.api.chart.hour',
  25.         'panel.api.calendar_integration.calendar_account.list',
  26.         'panel.api.calendar_integration.calendar.default',
  27.         'panel.api.event.resend_notification',
  28.         'hrm_routing_form_index',
  29.         'api_organization_delete_member',
  30.         'panel.api.organization.leave',
  31.         'panel.organization.delete',
  32.         'api_organization_members_list',
  33.         'panel.api.zapier.event.mock',
  34.         'panel.api.routing_form.field.delete',
  35.         'panel.api.routing_form.create',
  36.         'panel.api.routing_form.field.create',
  37.         'panel.api.routing_form.route.create',
  38.         'panel.api.routing_form.delete',
  39.         'panel.api.routing_form.route.delete',
  40.         'panel.api.routing_form.get',
  41.         'panel.api.routing_form.route.get',
  42.         'panel.api.routing_form.list',
  43.         'panel.api.routing_form_result.list',
  44.         'panel.api.routing_form.update',
  45.         'panel.api.routing_form.field.update',
  46.         'panel.api.routing_form.route.update',
  47.     ];
  48.     public function __construct(EntityManagerInterface $entityManagerTokenStorageInterface $tokenStorage)
  49.     {
  50.         $this->entityManager $entityManager;
  51.         $this->tokenStorage $tokenStorage;
  52.     }
  53.     /**
  54.      * {@inheritdoc}
  55.      */
  56.     public static function getSubscribedEvents()
  57.     {
  58.         return [
  59.             KernelEvents::REQUEST => ['setCurrentUser'],
  60.         ];
  61.     }
  62.     public function setCurrentUser(RequestEvent $event)
  63.     {
  64.         if (!in_array($event->getRequest()->get('_route'), self::ROUTES_IGNORE_THIS_FILTER)) {
  65.             $token $this->tokenStorage->getToken();
  66.             if ($token && $token->getUser() instanceof UserInterface) {
  67.                 $this->entityManager
  68.                     ->getFilters()
  69.                     ->enable('current_user')
  70.                     ->setParameter('user_id'$token->getUser()->getId());
  71.             }
  72.         }
  73.     }
  74. }