Symfony模拟-独立的防火墙和独立的用户提供程序
我有一个Symfony应用程序,有两个防火墙,一个用于管理员,一个用于普通用户Symfony模拟-独立的防火墙和独立的用户提供程序,symfony,fosuserbundle,impersonation,Symfony,Fosuserbundle,Impersonation,我有一个Symfony应用程序,有两个防火墙,一个用于管理员,一个用于普通用户 admin: provider: admin # etc main_site: form_login: provider: fos_userbundle csrf_provider: form.csrf_provider 我想管理员用户能够正常用户。考虑到他们使用的是独立的防火墙和独立的用户提供商,我该如何做到这一点呢?我必须做几件事才能让它正常工作 上下文
admin:
provider: admin
# etc
main_site:
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
我想管理员用户能够正常用户。考虑到他们使用的是独立的防火墙和独立的用户提供商,我该如何做到这一点呢?我必须做几件事才能让它正常工作 上下文键:如上所述,我必须为两个防火墙提供相同的上下文。如果不这样做,管理员在尝试切换用户时会转到登录页面 两个防火墙上的配置:我必须向两个防火墙添加基本的
切换用户
配置键:
switch_user:
role: ROLE_ADMIN
如果我只是将配置放在main\u站点
防火墙上,管理员在退出模拟并转到管理员页面时会收到一条拒绝访问的消息。(例如,路由/admin/dashboard?\u开关\u用户=\u退出
将给出403)
主站点配置上的提供商密钥:
main_site:
switch_user:
role: ROLE_ADMIN
provider: fos_userbundle
没有这个,我得到了错误“切换用户失败-user@example.com未找到”。深入研究代码,结果是使用了admin
用户提供程序,当然在使用该提供程序时找不到普通用户
(提供程序
键用于切换用户
配置。)
或者,我可以将其添加为防火墙本身的提供者密钥:
main_site:
switch_user:
role: ROLE_ADMIN
provider: fos_userbundle
您将从我问题中的配置中看到,fos\u userbundle
仅被指定为form\u login
的提供程序,而不是整个main\u站点的提供程序,这就是为什么在我添加它之前没有使用它的原因。将其添加到任意位置(模拟配置或整个防火墙)都可以实现这一目的
这是一整套相关配置:
admin:
provider: admin
# Have to put basic switch_user config on both firewalls
switch_user:
role: ROLE_ADMIN
# Both the admin and main_site firewalls have the same context, to allow
# cross-firewall impersonation
# https://stackoverflow.com/a/17991481/328817
context: boardworks
main_site:
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
switch_user:
role: ROLE_ADMIN
# Have to explicitly set the provider, otherwise the site will use the admin
# user provider when looking up the users whom admins are trying to impersonate
provider: fos_userbundle
# Rather than adding the provider above, I could have added it here:
#provider: fos_userbundle
非常感谢。将两个防火墙放在同一个上下文中解决了我的问题。谢谢你让我知道,@shrty。很高兴它有帮助!嘿@Sam,在这个问题上,我正试图和你做同样的事情,但是添加了不同的主机(跨主机模拟)。请检查一下,如果你有什么想法请告诉我。。。谢谢你好@rrubiorr81,恐怕我不知道主机的选项。很抱歉不能帮忙!