fosuserbundle - Symfony impersonation - separate firewalls and separate user providers -
i have symfony application 2 firewalls, 1 admins , 1 normal users.
admin: provider: admin # etc main_site: form_login: provider: fos_userbundle csrf_provider: form.csrf_provider i'd admin users able impersonate normal users. how can this, given they're using separate firewalls , separate user providers?
there several things had work.
context key: described here, had give both firewalls same context. without this, admins taken login page when trying switch users.
config on both firewalls: had add basic switch_user configuration keys both firewalls:
switch_user: role: role_admin if put config on main_site firewall, admins got access denied message when exiting impersonation , going admin page. (for example, route /admin/dashboard?_switch_user=_exit give 403).
provider key on main_site's config:
main_site: switch_user: role: role_admin provider: fos_userbundle without this, got error "switch user failed - user@example.com not found". digging code, turned out admin user provider being used, , of course normal users couldn't found when using provider.
(provider key switch_user config discussed here.)
alternatively, have added provider key firewall itself:
main_site: switch_user: role: role_admin provider: fos_userbundle you'll see config in question fos_userbundle specified provider form_login, not main_site whole, why wasn't being used until added it. adding in either place (impersonation config or whole firewall) trick.
here's full set of relevant config:
admin: provider: admin # have put basic switch_user config on both firewalls switch_user: role: role_admin # both admin , main_site firewalls have same context, 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 explicitly set provider, otherwise site use admin # user provider when looking users whom admins trying impersonate provider: fos_userbundle # rather adding provider above, have added here: #provider: fos_userbundle
Comments
Post a Comment