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 我想管理员用户能够正常用户。考虑到他们使用的是独立的防火墙和独立的用户提供商,我该如何做到这一点呢?我必须做几件事才能让它正常工作 上下文

我有一个Symfony应用程序,有两个防火墙,一个用于管理员,一个用于普通用户

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,恐怕我不知道主机的
选项。很抱歉不能帮忙!