2013-10-31 31 views
0

直到最近,我都有一個對公衆開放的區域(/和/ whatever)和一個需要ROLE_USER(/ portal和/ portal/whatever)的安全區域。現在我想在我的安全區域內創建一個需要ROLE_ADMIN的管理區域。 (/ portal/admin和/ portal/admin/whatever)。Symfony2初學者安全上下文問題

我security.yml如下所示:

firewalls: 
    login_firewall: 
     pattern: ^/portal/login$ 
     anonymous: ~ 
    secured_area: 
     pattern: ^/portal 
     form_login: 
      login_path: portal_login 
      check_path: login_check 
      default_target_path: portal_dashboard 
     logout: 
      path: portal_logout 
      target: portal_dashboard 
     http_basic: 
      realm: "MyFreelancer Client Portal" 

    access_control: 
    - { path: ^/portal/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/portal/, roles: ROLE_USER } 
    - { path: ^/portal/admin, roles: ROLE_ADMIN } 

我剛纔說的第三條線。我的問題是,具有ROLE_USER的用戶仍然可以訪問^/portal/admin。有人可以向我解釋爲什麼這不起作用嗎?

另一種方法是將admin區域置於/ admin和/ admin /任何位置,但這需要完全不同的防火牆上下文,我不太確定如何執行此操作。我試過了,但它一直把我帶回到/ portal /,當我瀏覽到/ admin /時,它要求再次登錄,然後再次回到/ portal /(無限循環)。

如果作爲一個輔助答案,你可以向我解釋用戶區和管理區的單個防火牆上下文的專業版和控制檯,以及單獨的防火牆上下文以及如何實現(如有必要)?

預先感謝您。

更新:我發現根本swopping兩個底線解決了這個問題,因爲它貫穿其中sequetially因而/門/管理/要反對第二線,只需要運行ROLE_USER。如果有人仍然可以告訴我一些關於在單獨的防火牆環境下運行管理區域是否會更好的原因以及爲什麼,以及如何更好地瞭解如何?

回答

0

設置您的access_control時,請確保您的路線的順序使得路線與上述路線之一不符。例如,放置^/admin/login/above ^/admin /,否則會觸發第一個匹配項(這將是^/admin /)。