我正在使用的網站在超級用戶的導航欄中包含一個搜索框,以便他們可以從常規用戶數組中選擇,這些用戶將所選用戶名傳遞給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),您應該很容易調整鏈接的技巧到新的簽名。 –