Php Symfony2(v2.3.4)-使用FOSUserBundle时拒绝访问

Php Symfony2(v2.3.4)-使用FOSUserBundle时拒绝访问,php,symfony,fosuserbundle,Php,Symfony,Fosuserbundle,当我转到project/web/时,应用程序将我重定向到te-web/login,其中是一个用于登录的表单 但当我获得授权后,在提交表单后,我返回到project/web/path,访问被拒绝。我的设置有什么问题,我想不出来 路由.yml my_backend: resource: "@MyBackendBundle/Controller/" type: annotation prefix: / fos_user_security: resource

当我转到project/web/时,应用程序将我重定向到te-web/login,其中是一个用于登录的表单

但当我获得授权后,在提交表单后,我返回到project/web/path,访问被拒绝。我的设置有什么问题,我想不出来

路由.yml

my_backend:
    resource: "@MyBackendBundle/Controller/"
    type:     annotation
    prefix:   /

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"
security.yml

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

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path:                     /login
            use_forward:                    false
            check_path:                     /login_check
            post_only:                      true
            always_use_default_target_path: false
            default_target_path:            /
            target_path_parameter:          _target_path
            use_referer:                    false
            failure_path:                   null
            failure_forward:                false
            username_parameter:             _username
            password_parameter:             _password
            csrf_parameter:                 _csrf_token
            intention:                      authenticate
        logout:       true
        anonymous:    true
access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_ADMIN }

ROLE\u ADMIN
是否与您的用户关联


另外,您是否尝试过删除
anonymous
config参数,或者至少将其设置为默认值(“~”)?如果我理解正确,您的整个应用程序需要身份验证,但
/login
提供了输入用户凭据的方法。正确吗?

验证后,将为您设置另一个角色,然后是角色\管理员。请使用该站点的app_dev.php版本,在您访问拒绝访问页面后,它会在底部告诉您您的角色

谢谢你们的回答。我解决了这个问题

在我用
promote--super命令创建并提升了用户之后,他获得了
ROLE\u super\u ADMIN
ROLE。但在我的应用程序的访问控制中只有
path:^/,role:role\u ADMIN

所以我将它修改为
ROLE\u SUPER\u ADMIN
,现在它可以正常工作,没有拒绝访问的异常


但我还有一个问题。现在,当我使用app.php版本时,一切都正常(在
/login
页面登录后,我被重定向到
/
),但对于app\u dev.php版本,登录后,我被重定向到
web/\u wdt/TOKEN
,页面为空

设置角色层次结构,以便超级管理员可以访问定义为管理员可访问的所有路由:

# app/config/security.yml
security:
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

角色\u ADMIN与我的用户关联(我用--super参数提升了他),我必须尝试删除匿名参数,并查看它是否有助于您正确理解。所有应用程序应仅针对经过身份验证的用户(管理员),仅/登录路径适用于所有人。将此开发人员防火墙添加到主防火墙之前:dev:pattern:^/(_(profiler | wdt)| css | images | js)/security:false请参见: