From 9541b27d76cab090919eec4f191b75ef2cb1f1aa Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 2 Jul 2025 10:02:26 +0800 Subject: [PATCH] refactor: enhance deletion process by removing associated permissions for knowledge, model, and tool --- apps/knowledge/serializers/knowledge.py | 1 + apps/models_provider/serializers/model_serializer.py | 5 +++++ apps/tools/serializers/tool.py | 1 + 3 files changed, 7 insertions(+) diff --git a/apps/knowledge/serializers/knowledge.py b/apps/knowledge/serializers/knowledge.py index f145c187f..8d0501ecb 100644 --- a/apps/knowledge/serializers/knowledge.py +++ b/apps/knowledge/serializers/knowledge.py @@ -384,6 +384,7 @@ class KnowledgeSerializer(serializers.Serializer): QuerySet(ProblemParagraphMapping).filter(knowledge=knowledge).delete() QuerySet(Paragraph).filter(knowledge=knowledge).delete() QuerySet(Problem).filter(knowledge=knowledge).delete() + QuerySet(WorkspaceUserResourcePermission).filter(target=knowledge.id).delete() knowledge.delete() delete_embedding_by_knowledge(self.data.get('knowledge_id')) return True diff --git a/apps/models_provider/serializers/model_serializer.py b/apps/models_provider/serializers/model_serializer.py index ebc1c7ef6..fae22b01b 100644 --- a/apps/models_provider/serializers/model_serializer.py +++ b/apps/models_provider/serializers/model_serializer.py @@ -7,6 +7,7 @@ from typing import Dict import uuid_utils.compat as uuid from django.core.cache import cache +from django.db import transaction from django.db.models import QuerySet from django.utils.translation import gettext_lazy as _ from rest_framework import serializers @@ -160,11 +161,15 @@ class ModelSerializer(serializers.Serializer): QuerySet(Model).filter(id=self.data.get('id')).update(status=Status.PAUSE_DOWNLOAD) return True + @transaction.atomic def delete(self, with_valid=True): if with_valid: super().is_valid(raise_exception=True) model_id = self.data.get('id') model = Model.objects.filter(id=model_id).first() + if model is None: + return True + QuerySet(WorkspaceUserResourcePermission).filter(target=model_id).delete() # TODO : 这里可以添加模型删除的逻辑,需要注意删除模型时的权限和关联关系 # if model.model_type == 'LLM': # application_count = Application.objects.filter(model_id=model_id).count() diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py index 0880e5c4e..23c38386f 100644 --- a/apps/tools/serializers/tool.py +++ b/apps/tools/serializers/tool.py @@ -336,6 +336,7 @@ class ToolSerializer(serializers.Serializer): tool = QuerySet(Tool).filter(id=self.data.get('id')).first() if tool.template_id is None and tool.icon != '/ui/favicon.ico': QuerySet(File).filter(id=tool.icon.split('/')[-1]).delete() + QuerySet(WorkspaceUserResourcePermission).filter(target=tool.id).delete() QuerySet(Tool).filter(id=self.data.get('id')).delete() def one(self):