gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:39:35 24 4
gpt4 key购买 nike

我正在用 laravel 写博客。当我查看用户身份验证时,我遇到了一些问题。我有 2 个表,一个是 users: id, name, ... 另一个是 role: user_id, privilege .. 我需要检查用户是否是管理员,我需要一个像 isAdmin() 这样的函数$isAdmin 属性。这是我放在 app/providers/AuthServiceProvider.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;
}

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

最佳答案

我假设用户只能拥有一个角色。您可以在 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);
}

关于php - Laravel _ 如何将查询注入(inject) Auth::user(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48586248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com