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

时间:2018-09-17 17:01:40

标签: laravel laravel-5 laravel-5.4

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

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

请问有任何关于如何执行此操作的想法,还是我使事情变得过于复杂?我正在寻找一种允许这样做的特定功能/代码,而不是一般策略。我正在使用在Heroku上部署的Laravel 5.4。我知道有中间件,但是它似乎并不能满足我的要求。

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以按照蒂姆·刘易斯(Tim Lewis)的上述评论中的建议进行操作,也可以在用户编辑页面中接受“覆盖”属性,您可以在其中传递特定的用户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对象传递给该方法,则将为该用户(而不是Admin)提供编辑页面。否则,用户将可以使用相同的路由来始终查看他们自己的编辑页面。

请谨慎使用此类代码!您将要确保非管理员没有能力加载用户对象并查看其他人的信息。这就是为什么我在if / else语句中添加了$ user-> role检查,但是您可能想以中间件的形式添加额外的安全性。

答案 1 :(得分:0)

spatie权限是一个很棒的软件包,我使用它可以使对超级管理员可用的资源具有权限。 https://github.com/spatie/laravel-permission