Skip to content

Commit 407fe83

Browse files
committed
refactor: streamline folder deletion process and enhance permission checks
1 parent b1dd321 commit 407fe83

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed

apps/folders/serializers/folder.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@
77
from rest_framework import serializers
88

99
from application.models.application import Application, ApplicationFolder
10+
from application.serializers.application import ApplicationOperateSerializer
1011
from application.serializers.application_folder import ApplicationFolderTreeSerializer
1112
from common.constants.permission_constants import Group, ResourcePermission, ResourcePermissionRole
13+
from common.exception.app_exception import AppApiException
1214
from folders.api.folder import FolderCreateRequest
1315
from knowledge.models import KnowledgeFolder, Knowledge
16+
from knowledge.serializers.knowledge import KnowledgeSerializer
1417
from knowledge.serializers.knowledge_folder import KnowledgeFolderTreeSerializer
1518
from system_manage.models import WorkspaceUserResourcePermission
1619
from tools.models import ToolFolder, Tool
20+
from tools.serializers.tool import ToolSerializer
1721
from tools.serializers.tool_folder import ToolFolderTreeSerializer
1822
from users.serializers.user import is_workspace_manage
1923

@@ -34,7 +38,6 @@ def get_folder_type(source):
3438
return ToolFolder
3539
elif source == Group.APPLICATION.name:
3640
return ApplicationFolder
37-
# return ApplicationFolder
3841
elif source == Group.KNOWLEDGE.name:
3942
return KnowledgeFolder
4043
else:
@@ -205,7 +208,7 @@ def delete(self):
205208
for node in nodes:
206209
# print(node)
207210
# 删除相关的资源
208-
Source.objects.filter(folder_id=node.id).delete()
211+
self.delete_source(node)
209212
# 删除节点
210213
node.delete()
211214
# 普通用户删除的文件夹内全部都得是自己有权限的资源
@@ -223,11 +226,34 @@ def delete(self):
223226
Q(permission_list__overlap=[ResourcePermission.MANAGE, ResourcePermissionRole.ROLE])
224227
).count()
225228
if auth_list != len(source_ids):
226-
raise serializers.ValidationError(_('This folder contains resources that you do not have permission to delete'))
227-
# print('Deleting folder:', node.id)
228-
Source.objects.filter(folder_id=node.id).delete()
229+
raise AppApiException(500, _('This folder contains resources that you dont have permission'))
230+
self.delete_source(node)
229231
node.delete()
230232

233+
def delete_source(self, node):
234+
Source = get_source_type(self.data.get('source')) # noqa
235+
source_ids = Source.objects.filter(folder_id=node.id).values_list('id', flat=True)
236+
source = self.data.get('source')
237+
238+
for source_id in source_ids:
239+
if source == Group.TOOL.name:
240+
ToolSerializer.Operate(data={
241+
'workspace_id': self.data.get('workspace_id'),
242+
'id': source_id,
243+
}).delete()
244+
elif source == Group.APPLICATION.name:
245+
ApplicationOperateSerializer(data={
246+
'workspace_id': self.data.get('workspace_id'),
247+
'application_id': source_id,
248+
'user_id': self.data.get('user_id'),
249+
}).delete()
250+
elif source == Group.KNOWLEDGE.name:
251+
KnowledgeSerializer.Operate(data={
252+
'workspace_id': self.data.get('workspace_id'),
253+
'knowledge_id': source_id,
254+
'user_id': self.data.get('user_id'),
255+
}).delete()
256+
231257

232258
class FolderTreeSerializer(serializers.Serializer):
233259
workspace_id = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('workspace id'))

0 commit comments

Comments
 (0)