Symfony 在模拟另一个用户后获得原始用户

Symfony get original user after impersonate another

我正在使用 Symfony 3.4,并且正在使用模拟用户功能:https://symfony.com/doc/3.4/security/impersonating_user.html

我需要在模拟用户时获取原始用户。我不知道该怎么做。

在模拟期间,为用户提供了一个名为 ROLE_PREVIOUS_ADMIN 的特殊角色,有没有办法更改此角色?

例如,如果我的原始用户是ROLE_ADMIN,则特殊角色是ROLE_PREVIOUS_ADMIN,但如果我的原始用户是ROLE_SOMETHING,则自定义角色应该是:ROLE_PREVIOUS_SOMETHING

我只需要有办法获得原始用户或至少获得他的角色。

谢谢!

我找到了解决方案:

public function isImpersonatorAdmin()
{
    $impersonatorUser = false;

    if ($this->security->isGranted('ROLE_PREVIOUS_ADMIN')) {
        foreach ($this->security->getToken()->getRoles() as $role) {
            if ($role instanceof SwitchUserRole) {
                $impersonatorUser = $role->getSource()->getUser()->hasRole('ROLE_ADMIN');
                break;
            }
        }
    }

    return $impersonatorUser;
}

如果模仿者是 ROLE_ADMIN,此函数 return 为真。