gpt4 book ai didi

symfony - 以编程方式注销切换的用户

转载 作者:行者123 更新时间:2023-12-02 01:21:34 26 4
gpt4 key购买 nike

我有一个应用程序,管理员经常代表普通用户行事。流程如下:

  • 管理员登录
  • 管理员会看到一个非管理员用户列表
  • 管理员单击指向非管理员用户的链接 <a href="{{ path('_main_app', {'_switch_user': user.username}) }}">
  • 管理员作为用户
  • 做他们的事情
  • 管理员重新点击浏览器,直到他们再次出现在非管理员用户列表中

  • 此时管理页面显示一个按钮 <a href="{{ path('_admin', {'_switch_user': '_exit'}) }}">Exit {{app.user.username}} </a>
    但是,管理员用户经常忘记单击它,而是单击另一个非管理员用户。当他们这样做时,他们会收到一条消息 You are already switched to User XXX .显然这是有意的,但对于管理员用户来说仍然不是一个很好的体验。

    允许管理员以这种方式切换用户的推荐方法是什么?我认为调用 {'_switch_user': '_exit'}每次他们到达普通用户列表时都是不错的选择(以及强制此页面永远不会被缓存),但我看不到以编程方式执行此操作的方法。

    另一种方法可能是访问 URL {'_switch_user': '_exit'}在 Javascript 中,但这似乎很不令人满意。

    推荐的方法是什么?

    最佳答案

    你应该看看 SwitchUserListener 类(Symfony\Component\Security\Http\Firewall\SwitchUserListener)。

    这就是魔术发生的地方(并且“您已经切换到...消息已创建”)。问题是它并没有给你太多的选择来吸引它。其实唯一官方的就是切换成功后的事件。

    但是你可以用你自己的实现完全替换这个监听器。
    在我自己的项目中使用它来实现用户开关的 ip 限制(acls 不起作用或者我弄错了)

    只需创建您自己的并在您的 services.yml 中替换它

    security.authentication.switchuser_listener:
    class: AppBundle\Services\Security\SwitchUserListener
    public: false
    abstract: true
    arguments: ['@security.token_storage', '', '@security.user_checker', '', '@security.access.decision_manager', '@?logger', '_switch_user', 'ROLE_ALLOWED_TO_SWITCH', '@?event_dispatcher']
    tags:
    - { name: monolog.logger, channel: security }

    编辑:您需要复制整个内容,因为所有相关功能都是私有(private)的。它不漂亮,但我看不到任何其他方式(除非在您的用例中,用户已经切换时可能根本不显示切换链接。)

    关于symfony - 以编程方式注销切换的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959112/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com