提问者:小点点

FOSUserBundle权限改造管理部分允许匿名用户


我正在尝试使管理员部分仅可供使用FOSUserBundle的管理员用户访问。

但是,如果我去管理员url(www.foo.local/app_dev.php/admin)没有身份验证,它允许我访问。

在Symfony debug工具栏中,它显示作为anon登录的

我已经按照官方文档配置了FOSUserBundle

这里是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 }

我不知道为什么它不要求角色\u ADMIN来允许访问管理部分,有什么想法吗?


共1个答案

匿名用户

我想那是因为你的规矩说

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

这意味着

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

注意admin后面的“/”

在哪里

www.foo.local/app_dev.php/admin

不会满足规则,因为它在末尾缺少“/”

尝试将规则更改为

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