symfony:在多个防火墙中模拟用户
Posted
技术标签:
【中文标题】symfony:在多个防火墙中模拟用户【英文标题】:symfony: Impersonate a User In multiple Firewalls 【发布时间】:2018-06-04 11:19:04 【问题描述】:我为管理员和我的用户设置了两个防火墙。 我想将用户从管理员切换到其他用户:
admin:
pattern: /admin
anonymous: ~
http_basic: ~
switch_user:
role: ROLE_ADMIN
logout:
path: /admin/logout
target: /
user:
pattern: /user
anonymous: ~
http_basic: ~
logout:
path: /user/logout
target: /
当我通过管理员登录时,我只能打开管理员而不是用户。
【问题讨论】:
参考这个symfony.com/doc/current/security/impersonating_user.html @Robert 这仅适用于一个特殊的防火墙 【参考方案1】:你的两个防火墙必须在同一个context下。
试试这个:
admin:
context: broadcast
pattern: /admin
anonymous: ~
http_basic: ~
switch_user:
role: ROLE_ADMIN
logout:
path: /admin/logout
target: /
user:
context: broadcast
pattern: /user
anonymous: ~
http_basic: ~
logout:
path: /user/logout
target: /
【讨论】:
我的用户和管理员可以拥有相同的用户名和其他信息。用户和管理员完全分开 你试过了吗?如果您在管理页面上并尝试在 /user/[RANDOMUSERPAGE] 上模拟用户,它将选择用户防火墙并检索用户(即使管理员具有相同的用户名)。 当我切换到给我的用户时:“表达式“has_role('ROLE_USER')”拒绝访问” 我也试过,但我遇到了同样的问题“拒绝访问”。即使使用我想模拟的目标路径的根目录(不需要登录用户)。我认为访问被拒绝,因为在此上下文中找不到ROLE_ALLOWED_TO_SWITCH
。以上是关于symfony:在多个防火墙中模拟用户的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4 - 安全性 - 从多个防火墙相互共享上下文