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

时间:2013-09-04 21:09:10

标签: php symfony fosuserbundle

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

但是当我获得授权后,在提交表单后我回到了项目/网络/路径,并且Acces拒绝了例外。我的设置出了什么问题,我无法理解。

的routing.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 }

4 个答案:

答案 0 :(得分:0)

ROLE_ADMIN是否与您的用户相关联?

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

答案 1 :(得分:0)

在您进行身份验证后,您将被设置为另一个角色,然后是ROLE_ADMIN。请使用该网站的app_dev.php版本,在您访问拒绝访问权限页面后,它会告诉您您的角色。

答案 2 :(得分:0)

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

在我使用promote --super command创建和提升用户后,他获得了ROLE_SUPER_ADMIN个角色。但在我的应用程序的访问控制中,只有path: ^/, role: ROLE_ADMIN

因此我将其修改为ROLE_SUPER_ADMIN,现在它可以在没有“拒绝访问”的情况下运行。

但在这种情况下我还有一个问题。现在当我使用app.php版本时一切正常(登录/login页面后我被重定向到/)但是使用app_dev.php版本,登录后我被重定向到{{1}用空页面。

答案 3 :(得分:0)

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

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

Symfony2 doc