symfony:在多个防火墙中模拟用户

Posted

技术标签:

【中文标题】symfony:在多个防火墙中模拟用户【英文标题】:symfony: Impersonate a User In multiple Firewalls 【发布时间】:2018-06-04 11:19:04 【问题描述】:

我为管理员和我的用户设置了两个防火墙。 我想将用户从管理员切换到其他用户:

    admin:
        pattern: /admin
        anonymous: ~
        http_basic: ~
        switch_user:
            role: ROLE_ADMIN
        logout:
            path:   /admin/logout
            target: /

    user:
        pattern: /user
        anonymous: ~
        http_basic: ~
        logout:
            path:   /user/logout
            target: /

当我通过管理员登录时,我只能打开管理员而不是用户。

【问题讨论】:

参考这个symfony.com/doc/current/security/impersonating_user.html @Robert 这仅适用于一个特殊的防火墙 【参考方案1】:

你的两个防火墙必须在同一个context下。

试试这个:

admin:
    context: broadcast
    pattern: /admin
    anonymous: ~
    http_basic: ~
    switch_user:
        role: ROLE_ADMIN
    logout:
        path:   /admin/logout
        target: /

user:
    context: broadcast
    pattern: /user
    anonymous: ~
    http_basic: ~
    logout:
        path:   /user/logout
        target: /

【讨论】:

我的用户和管理员可以拥有相同的用户名和其他信息。用户和管理员完全分开 你试过了吗?如果您在管理页面上并尝试在 /user/[RANDOMUSERPAGE] 上模拟用户,它将选择用户防火墙并检索用户(即使管理员具有相同的用户名)。 当我切换到给我的用户时:“表达式“has_role('ROLE_USER')”拒绝访问” 我也试过,但我遇到了同样的问题“拒绝访问”。即使使用我想模拟的目标路径的根目录(不需要登录用户)。我认为访问被拒绝,因为在此上下文中找不到 ROLE_ALLOWED_TO_SWITCH

以上是关于symfony:在多个防火墙中模拟用户的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4 - 安全性 - 从多个防火墙相互共享上下文

Symfony 2 与多个提供商、多个防火墙和多个主机的安全问题

Symfony2 中的多个动态防火墙和 CAS 服务器

symfony 2 在防火墙检查之前在事件监听器中添加角色

Symfony 3,一个应用程序中的 2 个防火墙

Symfony2 多 FosUserBundle