model->all()->toTree(); } public function allNoTree(): ?Collection { return $this->model->all(); } public function find(int $id): ?Permission { return $this->model->find($id); } public function findByScope(string $scope): ?Permission { return $this->model->where('scope', $scope)->first(); } public function update(PermissionDto $permissionDto, int $id): ?Permission { $permission = $this->model->find($id); $permission->update([ '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([ 'scope' => $permissionDto->scope, 'description' => $permissionDto->description, 'bits' => $permissionDto->bits, 'scope' => $permissionDto->scope, ]); if ($permissionDto->parent_id) { $parent = $this->model->find($permissionDto->parent_id); $permission->prependToNode($parent); } $permission->save(); return $permission; } public function delete(int $id): bool { return $this->model->destroy($id) > 0; } }