[英]Multiple security firewalls with the same pattern in Symfony2
我正在為兩種類型的用戶使用兩個具有相同模式的防火牆:
這是我簡化的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
,然后進行相應的重定向。
我的問題是,有什么優雅的方法可以解決這個問題嗎? 也許使用事件偵聽器並手動檢查拒絕的權限,那么所請求的URL是否需要ROLE_FRONTEND_USER
或ROLE_ADMIN
角色?
您可以手動設置將用戶重定向到的網址:
front:
pattern: .*
# ...
access_denied_url: /user/login
匿名用戶將被重定向到預期的登錄路由,而無需每個防火牆使用特定的模式。
希望這能解決你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.