Роли и разрешения Laravel Spatie - ошибка при обновлении
Мне нужна помощь для моего приложения Laravel.
Я использую пространственные роли и разрешения.
Когда я создаю пользователя, назначать роли не проблема. Когда я обновляю того же пользователя, возникает следующая ошибка:
[2019-12-06 08:44:36] local.ERROR: данная роль или разрешение должны использовать охрану
instead of `web`. {"userId":1,"exception":"[object] (Spatie\\Permission\\Exceptions\\GuardDoesNotMatch(code: 0): The given role or permission should use guard
вместо тогоweb
. в /home/vagrant/code/test/vendor/spatie/laravel-permission/src/Exceptions/GuardDoesNotMatch.php:12)
public function store(StoreUserRequest $request)
{
$user = $this->repo->create( $request->all());
$user->assignRole($request->roles);
return $user;
}
public function update(UpdateUserRequest $request, User $user)
{
$user = $this->repo->update($user, $request->all());
$user->assignRole($request->roles);
return $user;
}
я добавил protected $guard_name = 'web';
к модели пользователя, но все та же проблема.
Что случилось? Есть ли проблема с userId?
2 ответа
При использовании метода обновления syncRoles
вместо того assignRole
Когда вы назначаете роль пользователю, путь к модели App\User
вставить в таблицу model_has_roles
если вы измените пространство папок модели, вы получите ошибку. Думаю, этот код может вам больше помочь.
не пропустите добавитьHasRoles
class User extends Authenticatable
{
use Notifiable, HasRoles;
...
}
убедитесь, что вы импортируете use App\User;
UserController
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email|unique:users,email,'.$id,
'password' => 'same:confirm-password',
'roles' => 'required'
]);
$input = $request->all();
if(!empty($input['password'])){
$input['password'] = Hash::make($input['password']);
}else{
$input = array_except($input,array('password'));
}
$user = User::find($id);
$user->update($input);
DB::table('model_has_roles')->where('model_id',$id)->delete();
$user->assignRole($request->input('roles'));
return redirect()->route('users.index')
->with('success','User updated successfully');
}