如何允许 Laravel 管理员用户模拟或验证我网站上的任何其他用户?

How to allow Laravel admin user to simulate or authenticate as any other user on my site?

我正在尝试找出允许我正在构建的站点上的管理员用户访问和更新任何用户设置等的最快和最简单方法。我已经为普通用户编写了代码来更新他们的设置(以及各种其他操作)。理想情况下,就我的代码而言,我希望管理员能够 "be" 该用户,即允许管理员对该用户的帐户执行用户可以执行的任何操作。有什么办法吗?

如果我 Auth::login() 作为管理员,那么从 Laravel 的角度来看,我是管理员用户,而不是他们可能想要编辑的用户。如果我以用户身份登录,那么我没有管理员权限(在我的情况下,这意味着导航栏上有一个额外的管理菜单,其中包含暂停或删除用户或搜索其他用户的选项)。

关于如何做到这一点的任何想法,或者我是否使事情过于复杂?我正在寻找一个特定的 functions/code 来允许这个,而不是一个通用的策略。我正在使用 Laravel 5.4,部署在 Heroku 上。我知道有中间件,但它似乎没有像上面那样做我想要的。

非常感谢。

您可以按照 Tim Lewis 的上述评论中的建议进行操作,或者您可以在用户编辑页面中接受 "override" 属性,您可以在其中传递特定的用户 ID,然后查看作为该用户的页面。例如,该方法可能如下所示:

public function editUser(User $user=null) {
    //User that you want to edit can be provided. If not provided, $user will be null and we will load the user that is currently logged in.
    if($user!=null && Auth::user()->role=='admin')
        $user_to_edit = $user;
    else
        $user_to_edit = Auth::user();

    //other code goes here
}

然后,如果您将 $user 对象传递给该方法,您将获得该用户的编辑页面,而不是管理员。否则,用户将能够使用相同的路由以便始终查看自己的编辑页面。

像这样的代码要非常小心!您需要确保非管理员无法加载用户对象并查看其他人的信息。这就是我在 if/else 语句中添加 $user->role 检查的原因,但您可能希望以中间件的形式添加额外的安全性。

spatie permissions 是一个很棒的包,我用它来为超级管理员提供对资源的权限。 https://github.com/spatie/laravel-permission