gpt4 book ai didi

php - 如何根据用户在 Laravel 5 中的角色来选择用户?

转载 作者:可可西里 更新时间:2023-11-01 00:12:32 25 4
gpt4 key购买 nike

我想从我的 Controller 中选择所有具有“客户”角色的用户。

我有一个用户模型和一个角色模型。一个角色属于多个用户,一个用户又属于多个角色。

我已经建立了我的模型,并在模型实例级别有一些辅助函数来获取角色和用户

以下是用户和角色数据库模型:

app/User.php

class User extends Authenticatable
{
use Notifiable;

protected $fillable = [
'name', 'email', 'password',
];

protected $hidden = [
'password', 'remember_token',
];

// User belongs to many roles
public function roles()
{
return $this->belongsToMany('App\Role')->withTimestamps();
}

// whitelist specific roles
// reject if user does not have given roles
public function authorizeRoles($roles)
{
if ($this->hasAnyRole($roles)) {
return true;
}

abort(401, 'This action is unauthorized.');
}

// Check if a user has a role
public function hasRole($role)
{
if ($this->roles()->where('name', $role)->first())
{
return true;
}

return false;
}

// Pass in string or array to check if the user has a role
public function hasAnyRole($roles)
{
if (is_array($roles)) {
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
} else {
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
}

app/Role.php:

class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\User')->withTimestamps();
}
}

我有一个create_users_tablecreate_roles_table 和一个create_role_user_table 数据透视表的迁移。每个角色都有一个 ID、名称和描述。每个用户都有一个 ID、姓名、电子邮件和密码。

我想按所有具有“客户”角色的用户进行过滤。

在我的 Controller 方法中,我尝试调用角色,但它不起作用,因为它是一个实例方法:

// Display admin dashboard
public function admin(Request $request)
{
// check to make sure user is an admin
$request->user()->authorizeRoles('admin');

// Display all users that have the role "client"
// ***** section that does not work ********
$users = User::all()->roles()->where('name', 'client')->get();

return view('admin', compact('users'));

}

如何只使用具有名称为“client”的角色的用户填充 $users 变量?

最佳答案

使用whereHas()方法:

User::whereHas('roles', function ($q) use ($roleName) {
$q->where('name', $roleName);
})->get();

关于php - 如何根据用户在 Laravel 5 中的角色来选择用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798276/

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