src/EventListener/SwitchUserSubscriber.php line 27

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