簡體   English   中英

Symfony2中具有相同模式的多個安全防火牆

[英]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 我猜這是因為firewallaccess_control之間沒有連接,所以Symfony無法知道用戶是否嘗試訪問ROLE_FRONTEND_USERROLE_ADMIN ,然后進行相應的重定向。

我的問題是,有什么優雅的方法可以解決這個問題嗎? 也許使用事件偵聽器並手動檢查拒絕的權限,那么所請求的URL是否需要ROLE_FRONTEND_USERROLE_ADMIN角色?

您可以手動設置將用戶重定向到的網址:

front:
    pattern: .*
    # ...
    access_denied_url: /user/login

匿名用戶將被重定向到預期的登錄路由,而無需每個防火牆使用特定的模式。

希望這能解決你的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM