我的应用需要2个防火墙,一个用于管理员,另一个用于用户。在我的security.yml中我配置:
admin:
pattern: ^/admin
provider: fos_userbundle
form_login:
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
default_target_path: /admin/dashboard
always_use_default_target_path: true
logout:
path: /admin/logout
target: /admin
anonymous: ~
# defaut login area for standard users
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout:
path: /logout
anonymous: ~
我不知道这个配置是否正确。当我从主要区域登录时,一切正常,但是当我从 admin 登录时,它会将我重定向到主路径而不是 default_target_path 。我尝试将提供程序更改为自定义提供程序(例如in_memory)以重新检查 admin 防火墙,但我仍然是用户从fos_userbundle提供程序登录。你能救我吗?
答案 0 :(得分:1)
我认为这是因为有一个主要模式 主要: 模式:^ / 它甚至可以控制^ / admin 尝试用^ / home或^ / main替换^ /它将在
上工作答案 1 :(得分:0)
尝试删除匿名并使用访问控制。理论上,Symfony2会自动将用户从管理员重定向回来,即使他们使用相同的登录屏幕。
Symfony2中的安全性是级联的(所以/ admin也会出现在main下)
e.g。 标准用户的#defaut登录区域 主要: 模式:^ / form_login: 提供者:fos_userbundle csrf_provider:form.csrf_provider 登出: 路径:/ logout
admin:
pattern: ^/admin
provider: fos_userbundle
form_login:
use_forward: false
failure_path: null
target: /admin/dashboard
always_use_default_target_path: true
logout:
target: /admin
access_control:
- { path: ^/, roles: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] }
- { path: ^/admin, roles: [ROLE_ADMIN] }
您可能需要指定不同的ROLES。
答案 2 :(得分:0)
我将主防火墙模式更改为^ /(?!admin),现在一切正常。谢谢你的帮助!
main:
pattern: ^/(?!admin)
provider: default_provider
anonymous: ~
admin:
pattern: ^/admin
provider: admin_provider
anonymous: ~