管理部分的FOSUserBundle访问控制允许匿名用户

时间:2014-12-02 17:32:40

标签: symfony fosuserbundle symfony-security symfony-2.6

我尝试只为管理员用户使用FOSUserBundle设置管理部分。

但是,如果我在未经身份验证的情况下转到管理员网址(www.foo.local/app_dev.php/admin),则可以访问该网址。

在Symfony调试工具栏中,它显示Logged in as anon.

我已在official documentation

之后配置了FOSUserBundle

这是security.yml config:

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 个答案:

答案 0 :(得分: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 }