FOSUserBundle 允许 'Anon' 用户访问 `/admin`

FOSUserBundle allowing 'Anon' user to access `/admin`

我正在使用 FOSUserBundle 并在我的数据库中成功创建了用户。但是,我正在尝试让用户登录,并且只有 ROLE_ADMIN 用户按照 Symfony security 演练访问 /admin

然而,即使没有弄清楚用户登录,当我尝试访问 localhost/app_dev.php/admin 时,我也能够以 "Anon" 用户身份访问它。下面是我的 security.yml 和控制器文件:

app/config/security.yml

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

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: security.csrf.token_manager 

            logout:       true
            anonymous:    true

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

src/AppBundle/Controller/DefaultController.php

class DefaultController extends Controller
{
    /**
     * @Route("/admin", name="admin")
     */
    public function AdminAction(Request $request)
    {
        return $this->render('default/admin.html.twig', array(
            'title' => 'Welcome Admin!!'
        ));
    }
}

我不熟悉 FOSUserBundle,但是您的 access_control 条目是针对路径 /admin/ - 请注意尾部斜线,而您的示例 localhost/app_dev.php/admin 则没有。如果您从 access_control 条目中删除它或更改路线,那么这应该会按预期工作。

例如

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