какой лучший или обычный способ удалить все роли с пользователя?
Я пытался
$roles = $user->getRoleNames();
$user->removeRole($roles);
Return value of App\User::getStoredRole() must implement interface Spatie\Permission\Contracts\Role, instance of Illuminate\Support\Collection returned
заранее спасибо






Из документации ясно видно, что вы можете передать экземпляр Collection в removeRole, так что я думаю, что вы делаете это правильно.
The assignRole, hasRole, hasAnyRole, hasAllRoles and removeRole functions can accept a string, a \Spatie\Permission\Models\Role object or an \Illuminate\Support\Collection object.
Я думаю, вам тогда придется перебирать коллекцию, я бы также поднял это на их странице проблем github
Сделал вот так $user->removeRole($user->roles->first());
Используйте простой метод Laravel detach, например:
$user->roles()->detach();
Вы также можете удалить все роли, синхронизировавшись с пустым массивом, например.
$user->syncRoles([]);
Я подтвердил, что он работает на версии 5.8.
Это отлично работает даже на Laravel 7
Для ролей:
$user->syncRoles([]);
Для разрешений:
$user->syncPermissions([]);
Из документации Spatie вы можете найти способ удалить все предыдущие роли и назначить новые роли простым
$user->syncRoles($roles);
Для справки вы можете посетить этот ссылка
Пробовал вот этот
$roles = $user->getRoleNames(); $user->removeRole($roles);Return value of App\User::getStoredRole() must implement interface Spatie\Permission\Contracts\Role, instance of Illuminate\Support\Collection returned"