我正在 Laravel 中使用户角色发挥作用,一切都工作正常,但从任何地方都出现错误:调用成员函数 Roles() 或 null。
这是我发送请求的 html:
<td><input type="checkbox" {{ $user->hasRole('User') ? 'checked' : '' }} name="role_user"></td>
<td><input type="checkbox" {{ $user->hasRole('Author') ? 'checked' : '' }} name="role_author"></td>
<td><input type="checkbox" {{ $user->hasRole('Admin') ? 'checked' : '' }} name="role_admin"></td>
然后是我在模型用户和模型角色之间建立关系的函数,以及我检查角色的函数:
public function roles(){
return $this->belongsToMany('App\Role','role_user','user_id','role_id');
}
public function hasAnyRole($roles){
if(is_array($roles)){
foreach ($roles as $role){
if($this->hasRole($role)){
return true;
}
}
}else{
if($this->hasRole($roles)){
return false;
}
}
return false;
}
public function hasRole($role){
if($this->roles->where('name',$role)->first()){
return true;
}
return false;
}
最后,我分配新角色的功能:
public function postAdminAssignRoles(Request $request)
{
$user = User::where('email', $request['email'])->first();
$user->roles()->detach();
if ($request['role_user']) {
$user->roles()->attach(Role::where('name', 'User')->first());
}
if ($request['role_author']) {
$user->roles()->attach(Role::where('name', 'Author')->first());
}
if ($request['role_admin']) {
$user->roles()->attach(Role::where('name', 'Admin')->first());
}
return redirect()->back();
}
我不知道为什么现在不起作用,因为到目前为止一切都工作正常。有任何想法吗?