2014-12-02 75 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 } 
相关问题