更新Laravel中的用户角色



我有三个用户角色:学生、教师、管理员。

如果一个用户是一个学生,我想显示的选项,以提升他们无论是教师或管理员在下拉菜单和相同的其他角色,例如。教师获得管理员和学生选项。

当前是这样的:

指数

@if ($user->role == 'admin')
<form action="/admin/users/{{ $user->id }}" method="POST">
@csrf
@method('PATCH')
<input class="hidden" name="role" value="user">
<button>Make User</button>
</form>
@else
<form action="/admin/users/{{ $user->id }}" method="POST">
@csrf
@method('PATCH')
<input class="hidden" name="role"value="teacher">
<button>Make Teacher</button>
</form>
@endif

控制器

public function update(User $user)
{
$attributes = request()->validate([
'role' => ['required', Rule::exists('users', 'role')]
]);
$user->update($attributes);
return back()->with('success', 'User Updated!');
}

我怎么能做一个if语句列出所有的角色,除了当前的角色分配给用户,或者这是更好的在控制器中完成,而不是?

是否有可能把角色放在一个段塞,然后运行foreach,所以我不重复代码?

我是新的顶级Laravel,所以任何帮助都会很感激:)由于

  1. 为您的页面提供所有角色
  2. 如果用户hasRole()方法不存在,添加到该方法。
  3. 使用FormRequest进行验证
  4. 不要忘记获取$user的角色,以避免User::with('roles')->find($id)的n+1查询。
@foreach($allRoles as $role)
@if(! $user->hasRole($role)) 
Your form
@endif
@endforeach