我为两种类型的用户使用了两个具有相同模式的防火墙:
- 可以访问前端和后端的管理员,他们可以在前端应用程序中看到一些额外的控件,然后是普通用户。
- 只能访问前端的用户。
这是我的简化security.yml
配置:
firewalls:
admin:
pattern: .*
form_login:
login_path: /admin/login
check_path: /admin/login
logout:
path: /admin/logout
...
front:
pattern: .*
form_login:
login_path: /user/login
check_path: /user/login-check
logout: true
anonymous: true
...
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/admin/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/profile, role: ROLE_FRONTEND_USER }
- { path: ^/user/upload-photo, role: ROLE_FRONTEND_USER }
...
问题是,当任何未登录的用户尝试访问时,例如/user/profile
,他们会被重定向到/admin/login
. 我猜这是因为两者之间没有联系firewall
,access_control
所以 Symfony 无法知道用户是否尝试访问部分ROLE_FRONTEND_USER
,ROLE_ADMIN
然后进行相应的重定向。
我的问题是,有什么优雅的方法可以解决这个问题吗?也许使用事件侦听器并手动检查拒绝的权限是否需要请求的 URLROLE_FRONTEND_USER
或ROLE_ADMIN
角色?