Symfony冒充他人后获得原始用户

时间:2018-09-25 14:46:51

标签: symfony impersonation

我正在使用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

我只需要有一种方法来获取原始用户或至少获取他的角色。

谢谢!

1 个答案:

答案 0 :(得分:1)

我找到了解决方法:

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,则此函数返回true。