2014-03-13 87 views
0

在我的訪問控制中,我有一堆規則,但他們都沒有工作。我屬於一個沒有角色的組,我仍然可以訪問所有路線。我試圖在路徑的盡頭添加美元符號,但這並不奏效。我也嘗試重新排序路徑,但也失敗了。任何建議都會有幫助!Symfony2訪問控制不起作用

這裏是我的security.yml文件

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha512 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username 

    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       csrf_provider: form.csrf_provider 
      logout:  true 
      anonymous: true 

    access_control: 
     - { path: ^/system/staff/add, roles: ROLE_ADD_STAFF } 
     - { path: ^/system/staff/edit, roles: ROLE_EDIT_STAFF } 
     - { path: ^/system/staff, roles: ROLE_VIEW_STAFF } 

     - { path: ^/system/profile/edit, roles: ROLE_USER } 
     - { path: ^/system/profile, roles: ROLE_USER } 

     - { path: ^/system/officer/add, roles: ROLE_ADD_OFFICER } 
     - { path: ^/system/officer/edit, roles: ROLE_EDIT_OFFICER } 
     - { path: ^/system/officer, roles: ROLE_VIEW_OFFICER } 

     - { path: ^/system/job/add, roles: ROLE_ADD_JOBS } 
     - { path: ^/system/job/edit, roles: ROLE_EDIT_JOBS } 
     - { path: ^/system/job, roles: ROLE_VIEW_JOBS } 

     - { path: ^/system/company/add, roles: ROLE_ADD_COMPANIES } 
     - { path: ^/system/company/edit, roles: ROLE_EDIT_COMPANIES } 
     - { path: ^/system/company, role: ROLE_VIEW_COMPANIES } 

     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/system, roles: ROLE_USER } 

例如我當前組不具備ROLE_EDIT_STAFF角色然而,我仍然能夠訪問路徑。

回答

3

每當您提出請求時,symfony會檢查您的訪問控制以找到有效的工具。

當您請求/system/staff/edit繼承人會發生什麼情況。

適合你的設置它發現:

- { path: ^/system/staff/edit, roles: ROLE_EDIT_STAFF } 

不過既然你沒有作用ROLE_EDIT_STAFF它移動。

現在匹配:

- { path: ^/system/staff, roles: ROLE_VIEW_STAFF } 

因爲您的路線不與^ /系統/啓動的工作人員。你有ROLE_VIEW_STAFF,所以你被授予訪問權限。

在additon到一個你有:

- { path: ^/system, roles: ROLE_USER } 

這意味着,任何人誰擁有ROLE_USER可以訪問與/system開頭的路線。

是否其/system/admin/delete-all只是/system它匹配它們兩個。

如果你想使用嚴格的路線控制,我會建議從路線的開始處刪除^,除非你確實想要匹配從^後面開始的任何路線。

+0

感謝您的建議,但沒有解決問題 – zachstarnes

+0

我不確定你的意思。 FOSUserBundle處理大多數正在發生的事情lol使用命令行命令創建角色,並在創建用戶時在該位置選擇角色。數據庫中的關聯全部正確 – zachstarnes

+0

用戶是具有多個角色的組的一部分。當我去檢查數據庫時,我所屬的組沒有'ROLE_EDIT_STAFF'角色 – zachstarnes