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])
|
RoleConstants.USER])
|
||||||
TOOL_MODULE_EDIT = Permission(group=Group.TOOL, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN,
|
TOOL_MODULE_EDIT = Permission(group=Group.TOOL, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN,
|
||||||
RoleConstants.USER])
|
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,
|
TOOL_CREATE = Permission(group=Group.TOOL, operate=Operate.CREATE, role_list=[RoleConstants.ADMIN,
|
||||||
RoleConstants.USER])
|
RoleConstants.USER])
|
||||||
|
|||||||
@ -83,6 +83,10 @@ class ModuleEditAPI(ModuleReadAPI):
|
|||||||
return ModuleEditRequest
|
return ModuleEditRequest
|
||||||
|
|
||||||
|
|
||||||
|
class ModuleDeleteAPI(ModuleReadAPI):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ModuleTreeReadAPI(APIMixin):
|
class ModuleTreeReadAPI(APIMixin):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_parameters():
|
def get_parameters():
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import uuid_utils.compat as uuid
|
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 django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
@ -83,6 +83,13 @@ class ModuleSerializer(serializers.Serializer):
|
|||||||
module = QuerySet(Module).filter(id=self.data.get('id')).first()
|
module = QuerySet(Module).filter(id=self.data.get('id')).first()
|
||||||
return ModuleSerializer(module).data
|
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):
|
class ModuleTreeSerializer(serializers.Serializer):
|
||||||
workspace_id = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('workspace id'))
|
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):
|
def get_module_tree(self):
|
||||||
self.is_valid(raise_exception=True)
|
self.is_valid(raise_exception=True)
|
||||||
Module = get_module_type(self.data.get('source'))
|
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)
|
serializer = ToolModuleTreeSerializer(nodes, many=True)
|
||||||
return serializer.data # 这是可序列化的字典
|
return serializer.data # 这是可序列化的字典
|
||||||
|
|||||||
@ -7,7 +7,7 @@ from common.auth import TokenAuth
|
|||||||
from common.auth.authentication import has_permissions
|
from common.auth.authentication import has_permissions
|
||||||
from common.constants.permission_constants import Permission, Group, Operate
|
from common.constants.permission_constants import Permission, Group, Operate
|
||||||
from common.result import result
|
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
|
from modules.serializers.module import ModuleSerializer, ModuleTreeSerializer
|
||||||
|
|
||||||
|
|
||||||
@ -61,6 +61,18 @@ class ModuleView(APIView):
|
|||||||
data={'id': module_id, 'workspace_id': workspace_id, 'source': source}
|
data={'id': module_id, 'workspace_id': workspace_id, 'source': source}
|
||||||
).one())
|
).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):
|
class ModuleTreeView(APIView):
|
||||||
authentication_classes = [TokenAuth]
|
authentication_classes = [TokenAuth]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user