refactor: enhance deletion process by removing associated permissions for knowledge, model, and tool

This commit is contained in:
CaptainB 2025-07-02 10:02:26 +08:00
parent 58dde6629b
commit 9541b27d76
3 changed files with 7 additions and 0 deletions

View File

@ -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

View File

@ -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()

View File

@ -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):