How to override behavior of LoggableListener of Gedmo doctrine-extention?

45 Views Asked by At

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);
            }
        }
    }
0

There are 0 best solutions below