Symfony 冒充另一个用户后获得原始用户

标签 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

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

谢谢!

最佳答案

我找到了解决方案:

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。

关于Symfony 冒充另一个用户后获得原始用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52501011/

相关文章:

javascript - 带有 assetic 的 symfony 内联 Assets

symfony - 如何为现有的 Symfony+Doctrine 应用程序生成初始/基础迁移?

c# - 通过 SQL CLR 验证 NT 用户

c# - 来自 C# 的 Windows 模拟

c# - 使用模仿者复制文件,抛出未经授权的访问异常

php - 为什么 Symfony2 建议避免使用 'legacy' php session ?

Symfony 2 如何设置回退

php - jms 序列化器性能问题

c# - Entity Framework 和模拟

c++ - Windows模拟的奇怪行为