Symfony 2 中用户切换(模拟)后的重定向
Posted
技术标签:
【中文标题】Symfony 2 中用户切换(模拟)后的重定向【英文标题】:Redirect after user switching (impersonating) in Symfony 2 【发布时间】:2012-02-02 19:52:23 【问题描述】:我到处搜索,但似乎不可能做到。
我能够捕获来自SwitchEventListener
的SwitchEvent
并同时获取模仿者和目标用户对象(一个被模仿为),但我真的很想根据目标用户角色将请求重定向到其他 URL。
例子:
我有两个受限区域:“/basic”和“/elevated”,其中第一个需要ROLE_BASIC
,另一个需要ROLE_ELEVATED
角色。现在,如果我当前以 ROLE_ELEVATED
用户身份登录并想使用 URL 切换到某个 ROLE_BASIC
用户:
/basic/?_switch_user=some_basic_user
这会导致 AccessDeniedException,我不得不先导航到:
/?_switch_user=some_basic_user.
只有在这之后,我才能导航到 /basic,因为令牌已写入会话。
现在,问题,正如主题所暗示的那样:在进行用户切换后,有没有办法使用SwitchEvent
(或任何其他)重定向用户?
【问题讨论】:
你解决过这个问题吗?我有同样的问题。似乎AccessListener
在SwitchUserListener
之前被调用,所以你在SwitchUser
被调用之前就被锁定了?
实际上,我做到了:) 目前,我无法访问我的开发计算机,但正如我所做的那样(明天或之后的一天),我将在这里写下我是如何做到的。顺便说一句,感谢您提醒我发布的问题。我完全忘记了我问过它,所以我肯定需要用适当的答案“关闭”它......
我对你的解决方案也很感兴趣
【参考方案1】:
好的,我终于可以访问我的开发计算机并查找此问题的解决方案。
而且,我不得不说,它没有我想要的那么干净,但交货日期很关键,这是当时实现它的唯一方法。
所以,我基本上所做的就是向 URL /?_switch_user=some_basic_user
发送 AJAX(尽管我将 async
设置为 false
)请求,等待答案,如果成功,我将导航到 /basic/?_switch_user=some_basic_user
网址。我知道,它又快又脏,而且非常不可靠......
希望这会有所帮助....
【讨论】:
不错的解决方案,有点老套,但对我有用。我希望有一个内置的重定向路径【参考方案2】:您只需生成正确的链接即可:
<a href="/basic/?_switch_user=some_basic_user">...</a>
当然,twig 的 path
助手也可以生成 URL:
<a href=" path('basic_homepage', _switch_user: 'some_basic_user' ) ">...</a>
【讨论】:
引用问题:这将导致 AccessDeniedException以上是关于Symfony 2 中用户切换(模拟)后的重定向的主要内容,如果未能解决你的问题,请参考以下文章