mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-29 07:52:50 +00:00
fix: improve module tree query to use Q object for filtering by workspace_id
This commit is contained in:
parent
ac4df1421a
commit
8f0dd16949
|
|
@ -128,6 +128,8 @@ class PermissionConstants(Enum):
|
|||
RoleConstants.USER])
|
||||
TOOL_MODULE_EDIT = Permission(group=Group.TOOL, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN,
|
||||
RoleConstants.USER])
|
||||
TOOL_MODULE_DELETE = Permission(group=Group.TOOL, operate=Operate.DELETE, role_list=[RoleConstants.ADMIN,
|
||||
RoleConstants.USER])
|
||||
|
||||
TOOL_CREATE = Permission(group=Group.TOOL, operate=Operate.CREATE, role_list=[RoleConstants.ADMIN,
|
||||
RoleConstants.USER])
|
||||
|
|
|
|||
|
|
@ -83,6 +83,10 @@ class ModuleEditAPI(ModuleReadAPI):
|
|||
return ModuleEditRequest
|
||||
|
||||
|
||||
class ModuleDeleteAPI(ModuleReadAPI):
|
||||
pass
|
||||
|
||||
|
||||
class ModuleTreeReadAPI(APIMixin):
|
||||
@staticmethod
|
||||
def get_parameters():
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import uuid_utils.compat as uuid
|
||||
from django.db.models import QuerySet
|
||||
from django.db.models import QuerySet, Q
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from rest_framework import serializers
|
||||
|
||||
|
|
@ -83,6 +83,13 @@ class ModuleSerializer(serializers.Serializer):
|
|||
module = QuerySet(Module).filter(id=self.data.get('id')).first()
|
||||
return ModuleSerializer(module).data
|
||||
|
||||
def delete(self):
|
||||
self.is_valid(raise_exception=True)
|
||||
if self.data.get('id') == 'root':
|
||||
raise serializers.ValidationError(_('Cannot delete root module'))
|
||||
Module = get_module_type(self.data.get('source'))
|
||||
QuerySet(Module).filter(id=self.data.get('id')).delete()
|
||||
|
||||
|
||||
class ModuleTreeSerializer(serializers.Serializer):
|
||||
workspace_id = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('workspace id'))
|
||||
|
|
@ -91,6 +98,6 @@ class ModuleTreeSerializer(serializers.Serializer):
|
|||
def get_module_tree(self):
|
||||
self.is_valid(raise_exception=True)
|
||||
Module = get_module_type(self.data.get('source'))
|
||||
nodes = Module.objects.filter(workspace_id=self.data.get('workspace_id')).get_cached_trees()
|
||||
nodes = Module.objects.filter(Q(workspace_id=self.data.get('workspace_id'))).get_cached_trees()
|
||||
serializer = ToolModuleTreeSerializer(nodes, many=True)
|
||||
return serializer.data # 这是可序列化的字典
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from common.auth import TokenAuth
|
|||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import Permission, Group, Operate
|
||||
from common.result import result
|
||||
from modules.api.module import ModuleCreateAPI, ModuleEditAPI, ModuleReadAPI, ModuleTreeReadAPI
|
||||
from modules.api.module import ModuleCreateAPI, ModuleEditAPI, ModuleReadAPI, ModuleTreeReadAPI, ModuleDeleteAPI
|
||||
from modules.serializers.module import ModuleSerializer, ModuleTreeSerializer
|
||||
|
||||
|
||||
|
|
@ -61,6 +61,18 @@ class ModuleView(APIView):
|
|||
data={'id': module_id, 'workspace_id': workspace_id, 'source': source}
|
||||
).one())
|
||||
|
||||
@extend_schema(methods=['DELETE'],
|
||||
description=_('Delete module'),
|
||||
operation_id=_('Delete module'),
|
||||
parameters=ModuleDeleteAPI.get_parameters(),
|
||||
tags=[_('Module')])
|
||||
@has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.DELETE,
|
||||
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"))
|
||||
def delete(self, request: Request, workspace_id: str, source: str, module_id: str):
|
||||
return result.success(ModuleSerializer.Operate(
|
||||
data={'id': module_id, 'workspace_id': workspace_id, 'source': source}
|
||||
).delete())
|
||||
|
||||
|
||||
class ModuleTreeView(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
|
|
|||
Loading…
Reference in New Issue