Security 访问控制不';行不通

Security 访问控制不';行不通,security,symfony,access-control,Security,Symfony,Access Control,我想通过访问控制来保护路由/admin,但不起作用,我总是可以在不登录的情况下进入 编辑 这是管理员的路线: admin_homepage: resource: "@AppBundle/Resources/config/admin/index.yml" prefix: /{_locale}/admin 如果我从访问控制工作的路由中删除{u locale},我如何解决这个问题? 这是保安部 role_hierarchy: ROLE_ADMIN: [ROLE

我想通过访问控制来保护路由/admin,但不起作用,我总是可以在不登录的情况下进入

编辑

这是管理员的路线:

admin_homepage:
    resource: "@AppBundle/Resources/config/admin/index.yml"
    prefix:   /{_locale}/admin
如果我从访问控制工作的路由中删除{u locale},我如何解决这个问题? 这是保安部

role_hierarchy:
    ROLE_ADMIN:       [ROLE_AUTEUR, ROLE_MODERATEUR]
    ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    main:
        id: fos_user.user_provider.username_email


firewalls:
    main:
        pattern:   ^/
        anonymous: true
        provider:  main
        form_login:
            login_path: fos_user_security_login
            check_path: fos_user_security_check
            default_target_path: frontend_index
            csrf_provider: form.csrf_provider
        logout:
            path:   fos_user_security_logout
            target: frontend_index
        remember_me:
            key:    %secret%

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }
改变

(如果您愿意,也可以使用此选项)

原因是安全控制是使用regex执行的,因此如果在“admin”之前不指定任何前缀,控制将失败,任何人都可以登录

在我的解决方案的第一个版本中,admin之前的任何前缀都将匹配。对于第二个,只有一个前缀在a和z之间正好有两个字母(小写)将被匹配(因此,每个语言环境)

access_control:
    [...]
    - { path: ^/admin, roles: ROLE_ADMIN }
access_control:
    [...]
    - { path: ^/.*/admin, roles: ROLE_ADMIN }
access_contol:
    [...]
    - { path: ^/[a-z]{2}/admin, roles: ROLE_ADMIN }