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

问题描述 投票:1回答:2

我正在试图找出允许我正在建立的网站上的管理员用户访问和更新任何用户设置等的最快和最简单的方法。我为常规用户编写了代码以更新其设置(以及其他各种操作)。理想情况下,我希望管理员能够在我的代码方面“成为”该用户,即允许管理员为该用户的帐户执行用户可以执行的任何操作。有没有办法做到这一点?

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

有关如何做到这一点的任何想法,还是我过于复杂的事情?我正在寻找一个特定的功能/代码来实现这一点,而不是一般的策略。我正在使用部署在Heroku上的Laravel 5.4。我知道有中间件,但它似乎没有像我上面那样做。

非常感谢。

laravel laravel-5 laravel-5.4
2个回答
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 check的原因,但您可能希望以中间件的形式添加额外的安全性。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.