0

我的应用程序需要 2 个防火墙,一个用于管理员,另一个用于用户。在我的 security.yml 我配置:

    admin:
        pattern:      ^/admin
        provider:     fos_userbundle
        form_login:
            login_path:     /admin/login
            use_forward:    false
            check_path:     /admin/login_check
            failure_path:   null
            default_target_path: /admin/dashboard
            always_use_default_target_path: true
        logout:
            path:     /admin/logout
            target: /admin
        anonymous: ~

    # defaut login area for standard users
    main:
        pattern:      ^/
        form_login:
            provider:       fos_userbundle
            csrf_provider:  form.csrf_provider
        logout:
            path:     /logout
        anonymous:    ~

我不知道这个配置是否正确。当我从主区域登录时一切正常,但是当我从admin登录时,它会将我重定向到主路径而不是 default_target_path。我尝试将提供程序更改为自定义提供程序(例如 in_memory)以重新检查管理防火墙,但我仍然由 fos_userbundle 提供程序的用户登录。你能帮助我吗?

4

3 回答 3

1

我认为这是因为有一个主要模式 main: pattern: ^/ 它甚至可以控制 ^/admin 尝试将 ^/ 替换为 ^/home 或 ^/main 它对两者都有效

于 2013-07-22T16:00:53.950 回答
0

尝试删除匿名并改用访问控制。理论上 Symfony2 会自动将用户从 admin 重定向回来,即使他们使用相同的登录屏幕。

Symfony2 中的安全性是级联的(所以 /admin 也会出现在 main 下)

eg # 标准用户的默认登录区域 main: pattern: ^/ form_login: provider: fos_userbundle csrf_provider: form.csrf_provider logout: path: /logout

admin:
    pattern:      ^/admin
    provider:     fos_userbundle
    form_login:
        use_forward:    false
        failure_path:   null
        target: /admin/dashboard
        always_use_default_target_path: true
    logout:
        target: /admin

 access_control:
    - { path: ^/, roles: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] }
    - { path: ^/admin, roles: [ROLE_ADMIN] }

您可能需要指定不同的角色。

于 2013-07-22T04:16:44.360 回答
0

我将主防火墙模式更改为 ^/(?!admin),现在一切正常。谢谢你的帮助!

    main:
        pattern:      ^/(?!admin)
        provider:       default_provider
        anonymous:    ~

    admin:
        pattern:      ^/admin
        provider:     admin_provider
        anonymous:    ~
于 2013-07-23T09:29:53.103 回答