$attributes */ public function create(array $attributes): Model { try { DB::beginTransaction(); $roles = $attributes['roles'] ?? []; $permissions = $attributes['permissions'] ?? []; unset($attributes['roles'], $attributes['permissions']); /** @var User $user */ $user = $this->model->newQuery()->create($attributes); if (! empty($roles)) { $user->syncRoles($roles); } if (! empty($permissions)) { $user->syncPermissions($permissions); } DB::commit(); return $user; } catch (\Exception $e) { DB::rollBack(); Log::error('Error creating user with roles/permissions: ' . $e->getMessage(), [ 'attributes' => $attributes, 'exception' => $e, ]); throw $e; } } /** * @param int|string $id * @param array $attributes */ public function update(int|string $id, array $attributes): bool { try { DB::beginTransaction(); /** @var User|null $user */ $user = $this->find($id); if (! $user instanceof User) { DB::rollBack(); return false; } $roles = $attributes['roles'] ?? null; $permissions = $attributes['permissions'] ?? null; unset($attributes['roles'], $attributes['permissions']); $updated = $user->fill($attributes)->save(); if (! $updated) { DB::rollBack(); return false; } if (is_array($roles)) { $user->syncRoles($roles); } if (is_array($permissions)) { $user->syncPermissions($permissions); } DB::commit(); return true; } catch (\Exception $e) { DB::rollBack(); Log::error('Error updating user with roles/permissions: ' . $e->getMessage(), [ 'id' => $id, 'attributes' => $attributes, 'exception' => $e, ]); throw $e; } } }