【问题标题】:How to implement admin becoming another user temporarily?如何实现管理员临时成为另一个用户?
【发布时间】:2025-12-27 00:30:10
【问题描述】:

我有一个传统的 Rails 4 应用程序,带有用户模型和用于身份验证的魔法。 User 模型有一个 'admin' 标志。实现管理员暂时成为另一个用户(以查看用户看到的内容以帮助调试问题)然后重新成为其原始的、启用管理员的用户的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails-4 sorcery


    【解决方案1】:

    这是一个实现:

    http://robots.thoughtbot.com/how-to-masquerade-as-another-user-to-see-how-they-use-yo

    我想这就是你要找的东西

    【讨论】:

    • 一个相当优雅的解决方案,并呈现为 auth-library-netural。我会给它打勾。
    【解决方案2】:

    我不知道 rails,但是在 Unix 下,你的可执行文件需要被允许在用户模式之间切换。这是通过在可执行文件上设置“s”位并将所有者和/或组设置为执行您希望应用程序能够执行的任何操作所需的。 (即大多数情况下,您使用 root 作为所有者,使用 srwxr-xr-x 作为权限,即 4755 作为模式编号)。

    一旦你有了它,你的应用程序就可以使用函数setuid(<uid>)。如果您使用 root, 将为 0(零)。

    在 Linux 下,您还有 seteuid()setfsuid()setreuid()

    为确保您做的是正确的事情,我建议您阅读相应的手册页。

    【讨论】:

    • 对不起,如果我没有说清楚,但我不是在谈论 unix 系统用户。我说的是网站上的用户,每个用户在关系数据库的“用户”表中都有一条记录。
    • 啊!那我想我无能为力了。如果不更好地了解您的系统如何让用户登录……您将无法做到这一点。在我正在处理的 CMS 中,代码始终可以读取数据库中可用的任何内容。但是,我可以调用一个函数来测试任何给定用户(默认为当前用户)是否有权查看/修改/删除该数据。
    【解决方案3】:

    我没有这方面的经验,但也许你可以在你的用户模型中添加一个超级用户标志。如果您是超级用户,您可以调整管理员标志。超级用户的唯一目的就是能够关闭或打开管理员权限。现在,您可以在用户或管理员之间切换,并查看用户看到的内容。完成后,您启用 admin 并恢复您的管理界面。

    这可行,但我不知道这是否是您用例的最佳解决方案。这里只是理论。 :)

    【讨论】:

    • 这将允许您以 a 用户的身份查看事物,而不是特定用户。我想成为一个特定的用户,就好像我以他们的身份登录一样。这很容易实现。挑战在于如何恢复您的原始身份——让系统记住您是管理员,并允许您恢复该状态。
    • 在 linux 上认为相当于“su ”。
    最近更新 更多