<?php
namespace App\Security;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\SwitchUserEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Psr\Log\LoggerInterface;
class SwitchUserSubscriber implements EventSubscriberInterface
{
private $logger;
private $tokenStorage;
private $authenticationUtils;
public function __construct(LoggerInterface $logger, TokenStorageInterface $tokenStorage, AuthenticationUtils $authenticationUtils)
{
$this->logger = $logger;
$this->tokenStorage = $tokenStorage;
$this->authenticationUtils = $authenticationUtils;
}
public static function getSubscribedEvents()
{
return [
SwitchUserEvent::class => 'onSwitchUser',
];
}
public function onSwitchUser(SwitchUserEvent $event)
{
$targetUser = $event->getTargetUser();
$originalToken = $event->getToken();
$originalUser = $originalToken->getUser();
if ($originalUser && method_exists($originalUser, 'getEmail') && $originalUser->getEmail() === 'adresse@example.com') {
$this->logger->info('Switch user action detected for email adresse@example.com, reverting back to original user.');
// Reconnecter automatiquement l'utilisateur original
$this->tokenStorage->setToken($originalToken);
} else {
$username = $targetUser->getEmail();
$this->logger->info('Switching user to: ' . $username);
}
}
}