model->all()->toTree(); } public function allNoTree(): ?Collection { return $this->model->all(); } public function find(int $id): ?Permission { return $this->model->find(id: $id); } public function findByScope(string $scope): ?Permission { return $this->model->where(column: 'scope', operator: $scope)->first(); } public function update(int $id, PermissionDTO $dto, array $fieldsToUpdate): ?Permission { $permission = $this->model->find(id: $id); $updateFields = array_intersect_key( $dto->toArray(), array_flip($fieldsToUpdate) ); $permission->update($updateFields); return $permission->fresh(); } public function store(PermissionDTO $permissionDTO): Permission { $permission = $this->model->firstOrNew(attributes: [ 'scope' => $permissionDTO->scope, 'description' => $permissionDTO->description, 'bits' => $permissionDTO->bits, ]); if ($permissionDTO->parent_id) { $parent = $this->model->find(id: $permissionDTO->parent_id); $permission->prependToNode(parent: $parent); } $permission->save(); return $permission; } public function delete(int $id): bool { return $this->model->destroy(ids: $id) > 0; } }