成功登录会重定向到另一个防火墙的default_target_path

时间:2014-12-18 10:32:12

标签: symfony

我有以下" security.yml"配置和成功登录成为"成员"我被重定向到" administration_index"。

我想要实现的是重定向" root"用户到" administration_index"和普通用户("成员")到" members_index"。

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
    role_hierarchy:
        ROLE_MEMBER:        ROLE_USER
        ROLE_ROOT:          ROLE_ALLOWED_TO_SWITCH
    providers:
        chain_provider:
            chain:
                providers: [in_memory, users]
        in_memory:
            memory:
                users:
                    root:   { password: 3Qbg9rthce5, roles: 'ROLE_ROOT' }
                    member: { password: 3Qbg9rthce5, roles: 'ROLE_MEMBER' }
    firewalls:
        administration:
            pattern:    ^/administration
            form_login:
                login_path:                     login
                check_path:                     login_check
                csrf_provider:                  form.csrf_provider
                default_target_path:            administration_index
                always_use_default_target_path: false
            logout:
                ...
        members:
            pattern:    ^/secured
            form_login:
                login_path:                     login
                check_path:                     login_check
                csrf_provider:                  form.csrf_provider
                default_target_path:            members_index
                always_use_default_target_path: false
            logout:
                ...
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY}
        - { path: ^/administration, roles: ROLE_ROOT}
        - { path: ^/administration/users, roles: ROLE_ROOT}
        - { path: ^/secured, roles: ROLE_MEMBER }

谢谢!

1 个答案:

答案 0 :(得分:0)

我想你想这样做:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
    role_hierarchy:
        ROLE_MEMBER:        ROLE_USER
        ROLE_ROOT:          ROLE_ALLOWED_TO_SWITCH
    providers:
        chain_provider:
            chain:
                providers: [in_memory, users]
        in_memory:
            memory:
                users:
                    root:   { password: 3Qbg9rthce5, roles: 'ROLE_ROOT' }
                    member: { password: 3Qbg9rthce5, roles: 'ROLE_MEMBER' }
    firewalls:
        administration:
            pattern:    ^/
            form_login:
                login_path:                     login
                check_path:                     login_check
                csrf_provider:                  form.csrf_provider
                default_target_path:            common_index
                always_use_default_target_path: false
            logout:
                ...
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY}
        - { path: ^/administration, roles: ROLE_ROOT}
        - { path: ^/secured, roles: ROLE_MEMBER }

然后,在你的common_index控制器中,你可以做类似的事情(我假设你的标准控制器继承自框架包的控制器):

if ($this
    ->get('security.context')
    ->getToken()
    ->getUser()
    ->hasRole('ROLE_ROOT')) {
    return $this->forward('administration_index');
}

return $this->forward('members_index');

如果您认为这是重定向,则可以使用redirect代替forward

相关问题