src/EventListener/SwitchUserSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Enum\Location\LocationIdEnum;
  4. use App\Service\DatabaseService;
  5. use App\Service\UserActivityService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Security\Http\Event\SwitchUserEvent;
  8. use Symfony\Component\Security\Http\SecurityEvents;
  9. class SwitchUserSubscriber implements EventSubscriberInterface
  10. {
  11.     /** @var UserActivityService */
  12.     private $userActivityService;
  13.     /**
  14.      * @param UserActivityService $userActivityService
  15.      */
  16.     public function __construct(UserActivityService $userActivityService){
  17.         $this->userActivityService $userActivityService;
  18.     }
  19.     /**
  20.      * @param SwitchUserEvent $event
  21.      * @return void
  22.      */
  23.     public function onSwitchUser(SwitchUserEvent $event): void
  24.     {
  25.         $request $event->getRequest();
  26.         $refer $request->headers->get('referer');
  27.         $refer explode("/"$refer);
  28.         if($refer[3] === 'admin'){
  29.             $locationId LocationIdEnum::LOCATION_ID_ADMINISTRATION_OFFICE;
  30.         }
  31.         if($refer[3] === 'company'){
  32.             // currently not supported. no way to auto choose a location
  33.             $companyId $refer[4];
  34.             $locationId LocationIdEnum::LOCATION_ID_ADMINISTRATION_OFFICE;
  35.         }
  36.         if($refer[3] === 'client'){
  37.             $locationId $refer[4];
  38.         }
  39.         if($request->get('_switch_user') != '_exit') {
  40.             $this->userActivityService->logUserActivity(LoggableListener::ACTION_IMPERSONATE,  $event->getTargetUser(),  $locationId$event->getToken()->getOriginalToken()->getUser());
  41.         }
  42.     }
  43.     public static function getSubscribedEvents(): array
  44.     {
  45.         return [
  46.             // constant for security.switch_user
  47.             SecurityEvents::SWITCH_USER => 'onSwitchUser',
  48.         ];
  49.     }
  50. }