$attributes * @param iterable $companies */ public function create(array $attributes, iterable $companies): User { $user = User::create($attributes); $user->setSettings([ 'language' => 'default', ]); $companies = collect($companies); $user->companies()->sync($companies->pluck('id')); foreach ($companies as $company) { BouncerFacade::scope()->to($company['id']); BouncerFacade::sync($user)->roles([$company['role']]); } return $user; } /** * @param array $attributes * @param iterable $companies */ public function update(User $user, array $attributes, iterable $companies): User { $user->update($attributes); $companies = collect($companies); $user->companies()->sync($companies->pluck('id')); foreach ($companies as $company) { BouncerFacade::scope()->to($company['id']); BouncerFacade::sync($user)->roles([$company['role']]); } return $user; } public function delete(array $ids): bool { foreach ($ids as $id) { $user = User::find($id); if (! $user) { continue; } $this->memberReferencesCleaner->clear($user); if ($user->settings()->exists()) { $user->settings()->delete(); } $user->delete(); } return true; } }