Laravel _ 如何将查询注入 Auth::user()



我正在用laravel做一个博客。当我研究用户身份验证时,我在这里遇到了一些问题。我有 2 张表,一张是用户:id、名称、...另一个是角色:user_id,特权..我需要检查用户是否是管理员,我需要像isAdmin()$isAdmin属性这样的函数。这是我放置在应用程序/提供程序/身份验证服务提供商.php中的函数:

private static $isAdmin;
public static function isAdmin() {
    if (isset(self::$isAdmin)) {
        return self::$isAdmin;
    }
    $user_privilege = DB::table('role')
        ->select('privilege')
        ->where([
            ['privilege', '=', 'admin'],
            ['user_id', '=', Auth::user()->id],
        ])
        ->get()
        ->first();
    self::$isAdmin = isset($user_privilege->privilege);
    return self::$isAdmin;
}

此代码工作正常,但这需要对数据库进行两次查询以检查用户的管理员权限。所以我想找到一种方法将查询注入 Auth :: user ((,以便只有一个查询可以检索我想要的所有内容。我是拉拉维尔的初学者。你可以帮我吗?

我假设用户只能有一个角色。您可以在User模型中创建isAdmin()方法:

public function isAdmin()
{
    return auth()->user()->role->privilege === 'admin';
}

定义关系(如果尚未执行此操作(:

public function role()
{
    return $this->hasOne(Role::class);
}

然后将其与auth()->user()->isAdmin()一起使用。

如果用户可以具有多个角色:

public function isAdmin()
{
    auth()->user()->loadMissing('roles');
    return auth()->user()->roles->contains('admin');
}

和关系:

public function roles()
{
    return $this->hasMany(Role::class);
}

在用户模型上定义一个isAdmin方法:

public function isAdmin() {
    // simplified your query here
    return $this->hasRole('admin');
}

然后它将在身份验证保护上访问,如下所示:

Auth::user()->isAdmin();

最新更新