Symfony2:如何在模拟用户帐户时显示管理员帐户名?

时间:2012-05-03 11:16:42

标签: symfony twig

我希望显示类似的内容:

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

  
    

@ UserName [logout]

  

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

@ {{app.user.username}} [< a href =“{{path(”logout“)}}”> logout< / a> ]

案例2:“以ADMIN身份登录”

  
    

@ AdminName [logout]

  

这同样有效:

@ {{app.user.username}} [< a href =“{{path(”logout“)}}”> logout< / a> ]

案例3:“以模拟USER身份登录”

  
    

AdminName @ UserName [return]

  

现在有一个问题:

{{ ?? ..这里有什么.. ?? }} @ {{app.user.username}} [< a href =“{{(app.request.getRequestUri~ '?_ switch_user = _exit')}}“>返回< / a> ]

这是我所知道的唯一解决方案......对于显示用户名的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解决方案 - &gt;这应该是我的主要模板模板的一部分(由所有其他模板扩展) - &gt;我无法将控制器代码添加到所有操作,只是为了显示用户名。

2 个答案:

答案 0 :(得分:4)

根据您上面提出的想法,..你不能只是创建一个自定义的枝条扩展,它包含你的树枝模板中的逻辑,这样你就可以在你的树枝模板中调用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容器的类变量

答案 1 :(得分:1)

对于任何正在寻找 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