Symfony2访问控制重定向到登录

时间:2014-02-21 09:23:05

标签: php security symfony fosuserbundle access-control

在我正在开发的应用程序中,我对安全组件的访问控制存在一个奇怪的问题。

我为用户使用FOSUserBundle(当然),我将示例访问控制规则从捆绑文档复制到我的security.yml登录屏幕(/login)完美运行但问题是,所有其他访问控制规则绝对没有任何影响。例如,当用户转到/register时,他会被重定向到/login,同样适用于/resetting

这是我的security.yml文件:

jms_security_extra:
    secure_all_services: false
    expressions: true

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_email

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

        api:
            pattern: ^/api
            anonymous: false
            form_login: false
            provider: fos_userbundle
            http_basic:
                realm: "REST Service Realm"

        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    ~
            switch_user:  { role: ROLE_SUPER_ADMIN, parameter: _impersonate }

    access_control:
        - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/superadmin/, role: ROLE_SUPER_ADMIN }

我已尝试关闭包含/resetting/register的路径的安全性,但由于安全令牌仍需要可用于FOSU​​serBundle控制器,因此显然无效。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

可能与access_control的顺序有关,尝试将superadmin置于其他位置之上。您似乎也没有secure_area部分(如Symfony2 access control redirects to login中的此示例)

security:
    firewalls:
        secured_area:
            pattern:   ^/
            anonymous: ~
            form_login:
                login_path: login
                check_path: login_check

答案 1 :(得分:0)

问题在于,如果用户是否已登录,则另一个捆绑包会弄乱每个请求。如果用户未登录,则会为登录页面生成重定向响应。

不知道为什么会这样做,我认为它来自一个原始作者对Symfony经验不足的时代。

但是再次证明,总是检查日志。非常彻底。