我正在使用的网站在超级用户的导航栏中包含一个搜索框,以便他们可以从常规用户数组中选择,这些用户将所选用户名传递给Symfony的?_switch_user=
功能以模拟。是否可以使用Symfony`_ _switch_user`而不必在模拟之间进行“注销”?
我使用jQuery返回当前页面的路径并追加相应的?_switch_user=username
为需要的用户是这样的:
嫩枝:
{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" id="search-names" class="form-control" placeholder="User name">
</div>
</form>
<li><a href="{{ path(app.request.get('_route'), {'_switch_user':'_exit'}) }}">~Return To Admin~<span class="sr-only">Return To Admin</span></a></li>
{% endif %}
的jQuery:
$(function() {
$("#search-names").autocomplete({
source: "{{ path('usersearch') }}",
minLength: 2,
select: function (event, matched) {
console.log(matched)
window.location = window.location + '?_switch_user=' + matched.item.value
}
});
})
在上面,我必须包括~Return To Admin~
链接,以便超级用户可以“注销”每个模仿 - 否则Symfony会返回一个错误,指出另一个切换用户已登录。
如果可以的话,它会更加“超级用户友好”从一个普通用户切换到另一个,而不必每次请求?_switch_user=_exit
(虽然我仍然会保持按钮,在需要时,他们只执行管理任务)
是否有实现这个简单的方法是什么?我找到了一篇文章,建议通过创建一个新的监听器“Making impersonating a user more friendly”(文章中的'第二个功能'),但是我无法得到这个工作,我想知道是否是由于结构上的差异Symfony3?
我在您提供的链接和Symfony 3代码中看到的巨大差异是链接使用已弃用的SecurityContext。查看新的SwitchUserListener的[源代码](http://api.symfony.com/3.0/Symfony/Component/Security/Http/Firewall/SwitchUserListener.html),您应该很容易调整链接的技巧到新的签名。 –