【问题标题】:Symfony2: How to display admin-account name while impersonating user-account?Symfony2:如何在模拟用户帐户时显示管理员帐户名称?
【发布时间】:2012-05-03 11:16:42
【问题描述】:

我想显示类似的东西:

案例 1:“以 USER 身份登录”

@用户名 [注销]

这里没有问题,我只是这样做:

@ {{ app.user.username}} [ 注销 ]

案例 2:“以管理员身份登录”

@AdminName [注销]

这里也一样:

@ {{ app.user.username}} [ 注销 ]

案例 3:“以 ADMIN 身份登录冒充用户”

管理员名@用户名[返回]

现在这是一个问题:

{{ ??..what here..?? }} @ {{ app.user.username}} [ 返回 ]

这是我所知道的唯一解决方案...显示用户名的 sipmle 似乎有很多代码:/

{# iterating through user roles to find ROLE_PREVIOUS_ADMIN #}
{% for role in app.security.token.roles %}
  {% if role.source is defined %}
    {{ role.source.user.username }}
 {% endif %}
{% endfor %}
@ {{ app.user.username }} [ <a href="{{ (app.request.getRequestUri ~ '?_switch_user=_exit') }}">return</a> ]

还有其他方法吗?我需要一个纯 TWIG 解决方案 -> 这应该是我的主要树枝模板的一部分(由所有其他模板扩展)-> 我不能将控制器代码添加到所有操作中,仅用于显示用户名。

【问题讨论】:

标签: symfony twig


【解决方案1】:

根据您上面提出的想法,.. 您是否可以不只是创建一个包含您的 twig 模板中您的逻辑的自定义 twig 扩展,以便您可以在您的 twig 模板中调用 myCustomTwigFunction 并输出原始用户名字?

有关自定义树枝扩展的更多信息,请参阅http://symfony.com/doc/current/cookbook/templating/twig_extension.html

您在 Twig 扩展文件中的代码将是...

$roles = $this->container->get('security.context')->getToken()->getRoles();
foreach ($roles as $role) {
    if (method_exists($role, 'getSource')) {
        return ($role->getSource()->getUser()->getUsername());
    }
}

其中 $container 是您的 twig 扩展类上的 DI 容器的类变量

【讨论】:

    【解决方案2】:

    对于正在寻找 Symfony 4.3/4.4/5.0 解决方案的任何人:

    {% if is_granted('ROLE_PREVIOUS_ADMIN') %}
        {% for role in app.token.roles %}
            {% if role.role == 'ROLE_PREVIOUS_ADMIN' %}
                Admin username is {{ role.source.user.username }}
            {% endif %}
        {% endfor %}
    {% endif %}
    

    从 Symfony 5.1 开始,使用 IS_IMPERSONATOR 代替 ROLE_PREVIOUS_ADMIN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2014-07-10
      相关资源
      最近更新 更多