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(PermissionDTO $permissionDTO, int $id): ?Permission { $permission = $this->model->find(id: $id); $permission->update(attributes: [ 'scope' => $permissionDTO->scope, 'description' => $permissionDTO->description, 'bits' => $permissionDTO->bits, 'parent_id' => $permissionDTO->parent_id, ]); return $permission; } 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; } }