In my system I used to impersonate a user by logging in as a admin.
When I do certain add/updates as a impersonated user, gedmo stores impersonated user's username instead of admin user.
So I want to add one more scenario to gedmo's LoggableListener
that if Authorization token is instance of SwitchUserToken
then I wanted to set admin's username. For that I have to override setUserName
method and neeed to call this overriden method somehow.
Here's my configuration under Services.yaml
App\EventListener\CustomLoggableListener:
tags:
- { name: 'stof_doctrine_extensions.listener.loggable' }
Here's setUsername method under CustomLoggableListener
public function setUsername($username): void
{
if (null === $this->tokenStorage) {
return;
}
// Check if the user is impersonating
$token = $this->tokenStorage->getToken();
if (null !== $token) {
if ($token instanceof SwitchUserToken) {
$this->logger->log(LogLevel::DEBUG, 'customloggable');
// Use the original token's username if impersonating
$username = $token->getOriginalToken()->getUser()->getUsername();
$this->username = $username;
} else {
parent::setUsername($token);
}
}
}