Symfony2访问控制重定向到登录



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

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

这是我security.yml文件:

jms_security_extra:
    secure_all_services: false
    expressions: true
security:
    encoders:
        FOSUserBundleModelUserInterface: 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的路径打开安全性,但这显然不起作用,因为安全令牌仍然需要可用于 FOSUserBundle 控制器。

任何帮助将不胜感激!

这可能与access_control的顺序有关,请尝试将超级管理员置于其他管理员之上。您似乎也没有secured_area部分(例如Symfony2访问控制重定向到登录的示例)

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

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

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

但它再次证明,始终检查日志。非常彻底。

最新更新