gpt4 book ai didi

Symfony 模拟 - 单独的防火墙和单独的用户提供程序

转载 作者:行者123 更新时间:2023-12-04 22:19:53 24 4
gpt4 key购买 nike

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

admin:
provider: admin
# etc

main_site:
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider

我希望管理员用户能够 impersonate 普通用户。鉴于他们使用单独的防火墙和单独的用户提供商,我该怎么做?

最佳答案

我必须做几件事才能让它发挥作用。

上下文键:here 所述,我必须为两个防火墙提供相同的上下文。如果没有这个,管理员在尝试切换用户时会被带到登录页面。

两个防火墙上的配置: 我必须向两个防火墙添加基本的 switch_user 配置 key :

switch_user:
role: ROLE_ADMIN

如果我只是将配置放在 main_site 防火墙上,管理员在退出模拟并转到管理页面时会收到访问被拒绝的消息。 (例如,路由 /admin/dashboard?_switch_user=_exit 会给出 403)。

main_site 配置中的 Provider key :
main_site:
switch_user:
role: ROLE_ADMIN
provider: fos_userbundle

如果没有这个,我会收到错误“切换用户失败 - 找不到 user@example.com”。深入代码,发现使用的是 admin 用户提供程序,当然使用该提供程序时无法找到普通用户。

( provider 配置的 switch_user 键讨论了 here 。)

或者,我可以将其添加为防火墙本身的提供程序 key :
main_site:
switch_user:
role: ROLE_ADMIN
provider: fos_userbundle

您会从我的问题的配置中看到 fos_userbundle 仅被指定为 form_login 的提供者,而不是整个 main_site 的提供者,这就是为什么在我添加它之前没有使用它。在任何一个地方(模拟配置或整个防火墙)添加它都可以。

这是完整的相关配置集:
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

关于Symfony 模拟 - 单独的防火墙和单独的用户提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31288004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com