src/Security/SwitchUserSubscriber.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\Security\Http\Event\SwitchUserEvent;
  5. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  6. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  7. use Psr\Log\LoggerInterface;
  8. class SwitchUserSubscriber implements EventSubscriberInterface
  9. {
  10.     private $logger;
  11.     private $tokenStorage;
  12.     private $authenticationUtils;
  13.     public function __construct(LoggerInterface $loggerTokenStorageInterface $tokenStorageAuthenticationUtils $authenticationUtils)
  14.     {
  15.         $this->logger $logger;
  16.         $this->tokenStorage $tokenStorage;
  17.         $this->authenticationUtils $authenticationUtils;
  18.     }
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22.             SwitchUserEvent::class => 'onSwitchUser',
  23.         ];
  24.     }
  25.     public function onSwitchUser(SwitchUserEvent $event)
  26.     {
  27.         $targetUser $event->getTargetUser();
  28.         $originalToken $event->getToken();
  29.         $originalUser $originalToken->getUser();
  30.         if ($originalUser && method_exists($originalUser'getEmail') && $originalUser->getEmail() === 'adresse@example.com') {
  31.             $this->logger->info('Switch user action detected for email adresse@example.com, reverting back to original user.');
  32.             // Reconnecter automatiquement l'utilisateur original
  33.             $this->tokenStorage->setToken($originalToken);
  34.         } else {
  35.             $username $targetUser->getEmail();
  36.             $this->logger->info('Switching user to: ' $username);
  37.         }
  38.     }
  39. }