2014-12-02 74 views
0

我試圖使管理員部分僅對使用FOSUserBundle的管理員用戶可訪問。管理員部分的FOSUserBundle訪問控制允許匿名用戶

但是,如果我沒有身份驗證轉到管理網址(www.foo.local/app_dev.php/admin),它允許我訪問。

在Symfony的調試工具欄就說明Logged in as anon.

我已經配置了FOSUserBundle繼official documentation

這裏是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: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/, role: ROLE_ADMIN } 

我不知道爲什麼不要求ROLE_ADMIN爲了允許訪問管理部分,有什麼想法?

回答

1

我想這是因爲你的規則說

- { path: ^/admin/, role: ROLE_ADMIN } 

這意味着

www.foo.local/app_dev.php/admin/one 
www.foo.local/app_dev.php/admin/two 

注意 '/' 管理後

其中

www.foo.local/app_dev.php/admin 

,無法滿足規則,因爲它缺少在最後「/」

試圖改變規則是

- { path: ^/admin, role: ROLE_ADMIN } 
相關問題