【发布时间】:2021-05-02 20:02:49
【问题描述】:
我成功地检查了用户是否只有一个角色。现在我需要在这里检查的是,如果用户是管理员还是员工,并且如果上述任何角色匹配,则返回 true,否则返回 false。我无法这样做,因为我在 users 和 roles 之间使用一对多关系,所以我无法从一系列角色中检查角色。
- 数据库结构
Users
---------------
* id
* name
* email
* password
* role_id
* created_at
Roles
---------------
* id
* name
* slug
* created_at
- 应用/模型/用户
public function role()
{
return $this->belongsTo(Role::class);
}
public function hasRole(string $role)
{
if ($this->role()->where('slug', $role)->exists()) {
return true;
}
return false;
}
public function hasAnyRoles(array $roles)
{
if ($this->role()->whereIn('slug', $roles)->exists()) {
return true;
}
return false;
}
- 应用/模型/角色
public function users()
{
return $this->hasMany(User::class);
}
- App/Http/Responses/LoginResponse
public function toResponse($request)
{
if(Auth::user()->hasAnyRoles(['administrator', 'employee'])) {
return redirect()->route('backend.dashboard');
}
return redirect()->route('frontend.dashboard');
}
【问题讨论】:
-
您可以只加载该关系,因为它只是一条记录,然后您可以检查该角色 slug
-
附带说明(如果这不仅仅是一个玩具/实验),Spatie 提供了一个库 laravel-permission,它完全可以满足您的工作需求。
-
@lagbox 请检查
LoginResponse,我正在尝试检查用户是否具有管理员角色或员工角色,如果存在上述任何角色,则重定向到后端否则前端。 -
是的,我知道您在做什么,您可以加载该关系并使用
in_array来查看 slug 是否在角色数组中 -
@lagbox 你能告诉我代码吗,如果你能抽出一些时间。因为我对如何推进这件事一无所知。已经谢谢了!
标签: php laravel eloquent laravel-8