feat: enhance permission checks by incorporating role constants for workspace management

This commit is contained in:
CaptainB 2025-06-11 16:54:43 +08:00
parent 874dd34cba
commit ba0dcf6b1b
6 changed files with 584 additions and 302 deletions

View File

@ -6,7 +6,7 @@ from rest_framework.views import APIView
from common.auth import TokenAuth 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, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from folders.api.folder import FolderCreateAPI, FolderEditAPI, FolderReadAPI, FolderTreeReadAPI, FolderDeleteAPI from folders.api.folder import FolderCreateAPI, FolderEditAPI, FolderReadAPI, FolderTreeReadAPI, FolderDeleteAPI
@ -36,12 +36,16 @@ class FolderView(APIView):
responses=FolderCreateAPI.get_response(), responses=FolderCreateAPI.get_response(),
tags=[_('Folder')] # type: ignore tags=[_('Folder')] # type: ignore
) )
@has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.CREATE, @has_permissions(
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.CREATE,
@log(menu='folder', operate='Create folder', resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"),
get_operation_object=lambda r, k: {'name': r.data.get('name')}, RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id') )
) @log(
menu='folder', operate='Create folder',
get_operation_object=lambda r, k: {'name': r.data.get('name')},
workspace_id=lambda r, k: k.get('workspace_id')
)
def post(self, request: Request, workspace_id: str, source: str): def post(self, request: Request, workspace_id: str, source: str):
return result.success(FolderSerializer.Create( return result.success(FolderSerializer.Create(
data={'user_id': request.user.id, data={'user_id': request.user.id,
@ -58,8 +62,11 @@ class FolderView(APIView):
responses=FolderTreeReadAPI.get_response(), responses=FolderTreeReadAPI.get_response(),
tags=[_('Folder')] # type: ignore tags=[_('Folder')] # type: ignore
) )
@has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.READ, @has_permissions(
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.READ,
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, source: str): def get(self, request: Request, workspace_id: str, source: str):
return result.success(FolderTreeSerializer( return result.success(FolderTreeSerializer(
data={'workspace_id': workspace_id, 'source': source} data={'workspace_id': workspace_id, 'source': source}
@ -78,12 +85,16 @@ class FolderView(APIView):
responses=FolderEditAPI.get_response(), responses=FolderEditAPI.get_response(),
tags=[_('Folder')] # type: ignore tags=[_('Folder')] # type: ignore
) )
@has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.EDIT, @has_permissions(
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.EDIT,
@log(menu='folder', operate='Edit folder', resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"),
get_operation_object=lambda r, k: get_folder_operation_object(k.get('folder_id'), k.get('source')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id') )
) @log(
menu='folder', operate='Edit folder',
get_operation_object=lambda r, k: get_folder_operation_object(k.get('folder_id'), k.get('source')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, source: str, folder_id: str): def put(self, request: Request, workspace_id: str, source: str, folder_id: str):
return result.success(FolderSerializer.Operate( return result.success(FolderSerializer.Operate(
data={'id': folder_id, 'workspace_id': workspace_id, 'source': source} data={'id': folder_id, 'workspace_id': workspace_id, 'source': source}
@ -98,8 +109,11 @@ class FolderView(APIView):
responses=FolderReadAPI.get_response(), responses=FolderReadAPI.get_response(),
tags=[_('Folder')] # type: ignore tags=[_('Folder')] # type: ignore
) )
@has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.READ, @has_permissions(
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.READ,
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, source: str, folder_id: str): def get(self, request: Request, workspace_id: str, source: str, folder_id: str):
return result.success(FolderSerializer.Operate( return result.success(FolderSerializer.Operate(
data={'id': folder_id, 'workspace_id': workspace_id, 'source': source} data={'id': folder_id, 'workspace_id': workspace_id, 'source': source}
@ -114,12 +128,16 @@ class FolderView(APIView):
responses=FolderDeleteAPI.get_response(), responses=FolderDeleteAPI.get_response(),
tags=[_('Folder')] # type: ignore tags=[_('Folder')] # type: ignore
) )
@has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.DELETE, @has_permissions(
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.DELETE,
@log(menu='folder', operate='Delete folder', resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"),
get_operation_object=lambda r, k: get_folder_operation_object(k.get('folder_id'), k.get('source')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id') )
) @log(
menu='folder', operate='Delete folder',
get_operation_object=lambda r, k: get_folder_operation_object(k.get('folder_id'), k.get('source')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def delete(self, request: Request, workspace_id: str, source: str, folder_id: str): def delete(self, request: Request, workspace_id: str, source: str, folder_id: str):
return result.success(FolderSerializer.Operate( return result.success(FolderSerializer.Operate(
data={'id': folder_id, 'workspace_id': workspace_id, 'source': source} data={'id': folder_id, 'workspace_id': workspace_id, 'source': source}

View File

@ -6,7 +6,7 @@ from rest_framework.views import APIView
from common.auth import TokenAuth 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 PermissionConstants from common.constants.permission_constants import PermissionConstants, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from knowledge.api.document import DocumentSplitAPI, DocumentBatchAPI, DocumentBatchCreateAPI, DocumentCreateAPI, \ from knowledge.api.document import DocumentSplitAPI, DocumentBatchAPI, DocumentBatchCreateAPI, DocumentCreateAPI, \
@ -33,7 +33,10 @@ class DocumentView(APIView):
responses=DocumentCreateAPI.get_response(), responses=DocumentCreateAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(menu='document', operate="Create document", @log(menu='document', operate="Create document",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')), get_knowledge_operation_object(keywords.get('knowledge_id')),
@ -53,7 +56,10 @@ class DocumentView(APIView):
responses=DocumentTreeReadAPI.get_response(), responses=DocumentTreeReadAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Query( return result.success(DocumentSerializers.Query(
data={ data={
@ -77,7 +83,10 @@ class DocumentView(APIView):
responses=DocumentReadAPI.get_response(), responses=DocumentReadAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
operate = DocumentSerializers.Operate(data={ operate = DocumentSerializers.Operate(data={
'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id 'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id
@ -94,13 +103,17 @@ class DocumentView(APIView):
responses=DocumentEditAPI.get_response(), responses=DocumentEditAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Modify document", PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Modify document",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(DocumentSerializers.Operate(data={ return result.success(DocumentSerializers.Operate(data={
'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id 'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id
@ -114,13 +127,17 @@ class DocumentView(APIView):
responses=DocumentDeleteAPI.get_response(), responses=DocumentDeleteAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Delete document", PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Delete document",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
operate = DocumentSerializers.Operate(data={ operate = DocumentSerializers.Operate(data={
'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id 'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id
@ -145,6 +162,7 @@ class DocumentView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
) )
def post(self, request: Request, workspace_id: str, knowledge_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str):
split_data = {'file': request.FILES.getlist('file')} split_data = {'file': request.FILES.getlist('file')}
@ -190,12 +208,17 @@ class DocumentView(APIView):
responses=BatchEditHitHandlingAPI.get_response(), responses=BatchEditHitHandlingAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Modify document hit processing methods in batches", PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object_batch(r.data.get('id_list'))), @log(
workspace_id=lambda r, keywords: keywords.get('workspace_id')) menu='document', operate="Modify document hit processing methods in batches",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Batch( return result.success(DocumentSerializers.Batch(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -214,12 +237,17 @@ class DocumentView(APIView):
responses=SyncWebAPI.get_response(), responses=SyncWebAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Synchronize web site types", PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id')) menu='document', operate="Synchronize web site types",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(DocumentSerializers.Sync( return result.success(DocumentSerializers.Sync(
data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -238,13 +266,17 @@ class DocumentView(APIView):
responses=RefreshAPI.get_response(), responses=RefreshAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Refresh document vector library", PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Refresh document vector library",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(DocumentSerializers.Operate( return result.success(DocumentSerializers.Operate(
data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -262,12 +294,17 @@ class DocumentView(APIView):
responses=CancelTaskAPI.get_response(), responses=CancelTaskAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Cancel task", PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id')) menu='document', operate="Cancel task",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(DocumentSerializers.Operate( return result.success(DocumentSerializers.Operate(
data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -285,13 +322,17 @@ class DocumentView(APIView):
responses=BatchCancelTaskAPI.get_response(), responses=BatchCancelTaskAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Cancel tasks in batches", PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object_batch(r.data.get('id_list')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Cancel tasks in batches",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Batch(data={ return result.success(DocumentSerializers.Batch(data={
'knowledge_id': knowledge_id, 'workspace_id': workspace_id} 'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -313,13 +354,15 @@ class DocumentView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu='document', operate="Create documents in batches",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
{'name': f'[{",".join([document.get("name") for document in r.data])}]',
'document_list': r.data}), workspace_id=lambda r, keywords: keywords.get('workspace_id')
) )
@log(menu='document', operate="Create documents in batches",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
{'name': f'[{",".join([document.get("name") for document in r.data])}]',
'document_list': r.data}), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Batch( return result.success(DocumentSerializers.Batch(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -341,13 +384,15 @@ class DocumentView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission(),
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu='document', operate="Batch sync documents",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
) )
@log(menu='document', operate="Batch sync documents",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Batch( return result.success(DocumentSerializers.Batch(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -369,12 +414,15 @@ class DocumentView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission(),
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu='document', operate="Delete documents in batches",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
) )
@log(menu='document', operate="Delete documents in batches",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))),
workspace_id=lambda r, keywords: keywords.get('workspace_id'))
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Batch( return result.success(DocumentSerializers.Batch(
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id} data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
@ -395,13 +443,15 @@ class DocumentView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission(),
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu='document', operate="Batch refresh document vector library",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
) )
@log(menu='document', operate="Batch refresh document vector library",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('id_list'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success( return result.success(
DocumentSerializers.Batch( DocumentSerializers.Batch(
@ -424,13 +474,15 @@ class DocumentView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission(),
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu='document', operate="Batch generate related documents",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('document_id_list'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
) )
@log(menu='document', operate="Batch generate related documents",
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data.get('document_id_list'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.BatchGenerateRelated( return result.success(DocumentSerializers.BatchGenerateRelated(
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id} data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
@ -448,7 +500,10 @@ class DocumentView(APIView):
responses=DocumentTreeReadAPI.get_response(), responses=DocumentTreeReadAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, current_page: int, page_size: int): def get(self, request: Request, workspace_id: str, knowledge_id: str, current_page: int, page_size: int):
return result.success(DocumentSerializers.Query( return result.success(DocumentSerializers.Query(
data={ data={
@ -471,13 +526,17 @@ class DocumentView(APIView):
responses=DocumentExportAPI.get_response(), responses=DocumentExportAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Export document", PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Export document",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return DocumentSerializers.Operate(data={ return DocumentSerializers.Operate(data={
'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id 'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id
@ -493,13 +552,17 @@ class DocumentView(APIView):
responses=DocumentExportAPI.get_response(), responses=DocumentExportAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Export Zip document", PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Export Zip document",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return DocumentSerializers.Operate(data={ return DocumentSerializers.Operate(data={
'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id 'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id
@ -516,7 +579,9 @@ class DocumentView(APIView):
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions( @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_DOWNLOAD_SOURCE_FILE.get_workspace_knowledge_permission()) PermissionConstants.KNOWLEDGE_DOCUMENT_DOWNLOAD_SOURCE_FILE.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return DocumentSerializers.Operate(data={ return DocumentSerializers.Operate(data={
'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id 'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id
@ -533,13 +598,17 @@ class DocumentView(APIView):
responses=DocumentMigrateAPI.get_response(), responses=DocumentMigrateAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Migrate documents in batches", PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object_batch(r.data) @log(
), workspace_id=lambda r, keywords: keywords.get('workspace_id') menu='document', operate="Migrate documents in batches",
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object_batch(r.data)
), workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id, knowledge_id: str, target_knowledge_id: str): def put(self, request: Request, workspace_id, knowledge_id: str, target_knowledge_id: str):
return result.success(DocumentSerializers.Migrate( return result.success(DocumentSerializers.Migrate(
data={ data={
@ -563,13 +632,18 @@ class WebDocumentView(APIView):
responses=WebDocumentCreateAPI.get_response(), responses=WebDocumentCreateAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Create Web site documents", PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
{'name': f'[{",".join([url for url in r.data.get("source_url_list", [])])}]', @log(
'document_list': [{'name': url} for url in r.data.get("source_url_list", [])]}), menu='document', operate="Create Web site documents",
workspace_id=lambda r, keywords: keywords.get('workspace_id')) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
{'name': f'[{",".join([url for url in r.data.get("source_url_list", [])])}]',
'document_list': [{'name': url} for url in r.data.get("source_url_list", [])]}),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def post(self, request: Request, workspace_id: str, knowledge_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Create(data={ return result.success(DocumentSerializers.Create(data={
'knowledge_id': knowledge_id, 'workspace_id': workspace_id 'knowledge_id': knowledge_id, 'workspace_id': workspace_id
@ -589,13 +663,18 @@ class QaDocumentView(APIView):
responses=QaDocumentCreateAPI.get_response(), responses=QaDocumentCreateAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Import QA and create documentation", PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]', @log(
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}), menu='document', operate="Import QA and create documentation",
workspace_id=lambda r, keywords: keywords.get('workspace_id')) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]',
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def post(self, request: Request, workspace_id: str, knowledge_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Create(data={ return result.success(DocumentSerializers.Create(data={
'knowledge_id': knowledge_id, 'workspace_id': workspace_id 'knowledge_id': knowledge_id, 'workspace_id': workspace_id
@ -615,13 +694,18 @@ class TableDocumentView(APIView):
responses=TableDocumentCreateAPI.get_response(), responses=TableDocumentCreateAPI.get_response(),
tags=[_('Knowledge Base/Documentation')] # type: ignore tags=[_('Knowledge Base/Documentation')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate="Import tables and create documents", PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]', @log(
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}), menu='document', operate="Import tables and create documents",
workspace_id=lambda r, keywords: keywords.get('workspace_id')) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]',
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def post(self, request: Request, workspace_id: str, knowledge_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(DocumentSerializers.Create( return result.success(DocumentSerializers.Create(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}

View File

@ -5,7 +5,7 @@ from rest_framework.views import APIView
from common.auth import TokenAuth 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 PermissionConstants from common.constants.permission_constants import PermissionConstants, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from knowledge.api.knowledge import KnowledgeBaseCreateAPI, KnowledgeWebCreateAPI, KnowledgeTreeReadAPI, \ from knowledge.api.knowledge import KnowledgeBaseCreateAPI, KnowledgeWebCreateAPI, KnowledgeTreeReadAPI, \
@ -28,7 +28,10 @@ class KnowledgeView(APIView):
responses=KnowledgeTreeReadAPI.get_response(), responses=KnowledgeTreeReadAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_READ.get_workspace_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_READ.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str): def get(self, request: Request, workspace_id: str):
return result.success(KnowledgeSerializer.Query( return result.success(KnowledgeSerializer.Query(
data={ data={
@ -53,10 +56,15 @@ class KnowledgeView(APIView):
responses=KnowledgeEditAPI.get_response(), responses=KnowledgeEditAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Knowledge Base', operate="Modify knowledge base information", PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='Knowledge Base', operate="Modify knowledge base information",
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.Operate( return result.success(KnowledgeSerializer.Operate(
data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id} data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
@ -72,10 +80,15 @@ class KnowledgeView(APIView):
responses=KnowledgeBaseCreateAPI.get_response(), responses=KnowledgeBaseCreateAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DELETE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Knowledge Base', operate="Delete knowledge base", PermissionConstants.KNOWLEDGE_DELETE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='Knowledge Base', operate="Delete knowledge base",
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def delete(self, request: Request, workspace_id: str, knowledge_id: str): def delete(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.Operate( return result.success(KnowledgeSerializer.Operate(
data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id} data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
@ -90,7 +103,10 @@ class KnowledgeView(APIView):
responses=KnowledgeReadAPI.get_response(), responses=KnowledgeReadAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.Operate( return result.success(KnowledgeSerializer.Operate(
data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id} data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
@ -108,7 +124,10 @@ class KnowledgeView(APIView):
responses=KnowledgePageAPI.get_response(), responses=KnowledgePageAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_READ.get_workspace_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_READ.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, current_page: int, page_size: int): def get(self, request: Request, workspace_id: str, current_page: int, page_size: int):
return result.success(KnowledgeSerializer.Query( return result.success(KnowledgeSerializer.Query(
data={ data={
@ -133,10 +152,15 @@ class KnowledgeView(APIView):
responses=SyncWebAPI.get_response(), responses=SyncWebAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_SYNC.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Knowledge Base', operate="Synchronize the knowledge base of the website", PermissionConstants.KNOWLEDGE_SYNC.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='Knowledge Base', operate="Synchronize the knowledge base of the website",
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.SyncWeb( return result.success(KnowledgeSerializer.SyncWeb(
data={ data={
@ -160,7 +184,10 @@ class KnowledgeView(APIView):
responses=HitTestAPI.get_response(), responses=HitTestAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.HitTest( return result.success(KnowledgeSerializer.HitTest(
data={ data={
@ -187,10 +214,15 @@ class KnowledgeView(APIView):
responses=EmbeddingAPI.get_response(), responses=EmbeddingAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_VECTOR.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Knowledge Base', operate='Re-vectorize', PermissionConstants.KNOWLEDGE_VECTOR.get_workspace_knowledge_permission(),
get_operation_object=lambda r, k: get_knowledge_operation_object(k.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='Knowledge Base', operate='Re-vectorize',
get_operation_object=lambda r, k: get_knowledge_operation_object(k.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.Operate( return result.success(KnowledgeSerializer.Operate(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id, 'user_id': request.user.id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id, 'user_id': request.user.id}
@ -206,10 +238,15 @@ class KnowledgeView(APIView):
responses=KnowledgeExportAPI.get_response(), responses=KnowledgeExportAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Knowledge Base', operate="Export knowledge base", PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='Knowledge Base', operate="Export knowledge base",
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def get(self, request: Request, workspace_id: str, knowledge_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str):
return KnowledgeSerializer.Operate(data={ return KnowledgeSerializer.Operate(data={
'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id 'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id
@ -225,10 +262,15 @@ class KnowledgeView(APIView):
responses=KnowledgeExportAPI.get_response(), responses=KnowledgeExportAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Knowledge Base', operate="Export knowledge base containing images", PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='Knowledge Base', operate="Export knowledge base containing images",
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def get(self, request: Request, workspace_id: str, knowledge_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str):
return KnowledgeSerializer.Operate(data={ return KnowledgeSerializer.Operate(data={
'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id 'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id
@ -247,11 +289,15 @@ class KnowledgeView(APIView):
responses=GenerateRelatedAPI.get_response(), responses=GenerateRelatedAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_GENERATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='document', operate='Generate related documents', PermissionConstants.KNOWLEDGE_GENERATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, k: get_knowledge_operation_object(k.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id') )
) @log(
menu='document', operate='Generate related documents',
get_operation_object=lambda r, k: get_knowledge_operation_object(k.get('knowledge_id')),
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(KnowledgeSerializer.Operate( return result.success(KnowledgeSerializer.Operate(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id, 'user_id': request.user.id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id, 'user_id': request.user.id}
@ -269,7 +315,10 @@ class KnowledgeView(APIView):
responses=GetModelAPI.get_response(), responses=GetModelAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_EDIT.get_workspace_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_EDIT.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str): def get(self, request: Request, workspace_id: str):
return result.success(ModelSerializer.Query( return result.success(ModelSerializer.Query(
data={ data={
@ -290,7 +339,10 @@ class KnowledgeView(APIView):
responses=GetModelAPI.get_response(), responses=GetModelAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_EDIT.get_workspace_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_EDIT.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str): def get(self, request: Request, workspace_id: str):
return result.success(ModelSerializer.Query( return result.success(ModelSerializer.Query(
data={ data={
@ -313,10 +365,15 @@ class KnowledgeBaseView(APIView):
responses=KnowledgeBaseCreateAPI.get_response(), responses=KnowledgeBaseCreateAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) @has_permissions(
@log(menu='knowledge Base', operate='Create base knowledge', PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission(),
get_operation_object=lambda r, k: {'name': r.data.get('name'), 'desc': r.data.get('desc')}, RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, keywords: keywords.get('workspace_id')) )
@log(
menu='knowledge Base', operate='Create base knowledge',
get_operation_object=lambda r, k: {'name': r.data.get('name'), 'desc': r.data.get('desc')},
workspace_id=lambda r, keywords: keywords.get('workspace_id')
)
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(KnowledgeSerializer.Create( return result.success(KnowledgeSerializer.Create(
data={'user_id': request.user.id, 'workspace_id': workspace_id} data={'user_id': request.user.id, 'workspace_id': workspace_id}
@ -336,15 +393,19 @@ class KnowledgeWebView(APIView):
responses=KnowledgeWebCreateAPI.get_response(), responses=KnowledgeWebCreateAPI.get_response(),
tags=[_('Knowledge Base')] # type: ignore tags=[_('Knowledge Base')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) @has_permissions(
@log(menu='Knowledge Base', operate="Create a web site knowledge base", PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission(),
get_operation_object=lambda r, k: {'name': r.data.get('name'), 'desc': r.data.get('desc'), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
'first_list': r.FILES.getlist('file'), )
'meta': {'source_url': r.data.get('source_url'), @log(
'selector': r.data.get('selector'), menu='Knowledge Base', operate="Create a web site knowledge base",
'embedding_model_id': r.data.get('embedding_model_id')}} get_operation_object=lambda r, k: {'name': r.data.get('name'), 'desc': r.data.get('desc'),
'first_list': r.FILES.getlist('file'),
'meta': {'source_url': r.data.get('source_url'),
'selector': r.data.get('selector'),
'embedding_model_id': r.data.get('embedding_model_id')}}
, workspace_id=lambda r, keywords: keywords.get('workspace_id') , workspace_id=lambda r, keywords: keywords.get('workspace_id')
) )
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(KnowledgeSerializer.Create( return result.success(KnowledgeSerializer.Create(
data={'user_id': request.user.id, 'workspace_id': workspace_id} data={'user_id': request.user.id, 'workspace_id': workspace_id}

View File

@ -5,7 +5,7 @@ from rest_framework.views import Request
from common.auth import TokenAuth 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 PermissionConstants from common.constants.permission_constants import PermissionConstants, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from common.utils.common import query_params_to_single_dict from common.utils.common import query_params_to_single_dict
@ -28,7 +28,10 @@ class ParagraphView(APIView):
responses=ParagraphReadAPI.get_response(), responses=ParagraphReadAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
q = ParagraphSerializers.Query( q = ParagraphSerializers.Query(
data={ data={
@ -49,13 +52,17 @@ class ParagraphView(APIView):
responses=ParagraphCreateAPI.get_response(), responses=ParagraphCreateAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Create Paragraph', PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Create Paragraph',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(ParagraphSerializers.Create( return result.success(ParagraphSerializers.Create(
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id} data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id}
@ -74,7 +81,10 @@ class ParagraphView(APIView):
responses=ParagraphBatchDeleteAPI.get_response(), responses=ParagraphBatchDeleteAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(ParagraphSerializers.Batch( return result.success(ParagraphSerializers.Batch(
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id} data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id}
@ -91,13 +101,17 @@ class ParagraphView(APIView):
responses=ParagraphMigrateAPI.get_response(), responses=ParagraphMigrateAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Migrate paragraphs in batches', PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Migrate paragraphs in batches',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str,
target_knowledge_id: str, target_document_id): target_knowledge_id: str, target_document_id):
return result.success( return result.success(
@ -123,13 +137,17 @@ class ParagraphView(APIView):
responses=ParagraphBatchGenerateRelatedAPI.get_response(), responses=ParagraphBatchGenerateRelatedAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Batch generate related', PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Batch generate related',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(ParagraphSerializers.Batch( return result.success(ParagraphSerializers.Batch(
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id} data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id}
@ -148,13 +166,17 @@ class ParagraphView(APIView):
responses=ParagraphEditAPI.get_response(), responses=ParagraphEditAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Modify paragraph data', PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Modify paragraph data',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
o = ParagraphSerializers.Operate( o = ParagraphSerializers.Operate(
data={ data={
@ -176,7 +198,10 @@ class ParagraphView(APIView):
responses=ParagraphGetAPI.get_response(), responses=ParagraphGetAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
o = ParagraphSerializers.Operate( o = ParagraphSerializers.Operate(
data={ data={
@ -197,13 +222,17 @@ class ParagraphView(APIView):
parameters=ParagraphGetAPI.get_parameters(), parameters=ParagraphGetAPI.get_parameters(),
responses=ParagraphGetAPI.get_response(), responses=ParagraphGetAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')]) # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')]) # type: ignore
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Delete paragraph', PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Delete paragraph',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
o = ParagraphSerializers.Operate( o = ParagraphSerializers.Operate(
data={ data={
@ -229,13 +258,17 @@ class ParagraphView(APIView):
responses=ProblemCreateAPI.get_response(), responses=ProblemCreateAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Add associated questions', PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Add associated questions',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
return result.success(ParagraphSerializers.Problem( return result.success(ParagraphSerializers.Problem(
data={ data={
@ -255,7 +288,10 @@ class ParagraphView(APIView):
responses=ParagraphGetAPI.get_response(), responses=ParagraphGetAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
return result.success(ParagraphSerializers.Problem( return result.success(ParagraphSerializers.Problem(
data={ data={
@ -279,13 +315,17 @@ class ParagraphView(APIView):
responses=UnAssociationAPI.get_response(), responses=UnAssociationAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Disassociation issue', PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
) menu='Paragraph', operate='Disassociation issue',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
)
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(ParagraphSerializers.Association( return result.success(ParagraphSerializers.Association(
data={ data={
@ -310,13 +350,17 @@ class ParagraphView(APIView):
responses=AssociationAPI.get_response(), responses=AssociationAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='Paragraph', operate='Related questions', PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
get_knowledge_operation_object(keywords.get('knowledge_id')), )
get_document_operation_object(keywords.get('document_id')) @log(
), workspace_id=lambda r, k: k.get('workspace_id') menu='Paragraph', operate='Related questions',
) get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
get_knowledge_operation_object(keywords.get('knowledge_id')),
get_document_operation_object(keywords.get('document_id'))
), workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
return result.success(ParagraphSerializers.Association( return result.success(ParagraphSerializers.Association(
data={ data={
@ -340,7 +384,10 @@ class ParagraphView(APIView):
responses=ParagraphPageAPI.get_response(), responses=ParagraphPageAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, def get(self, request: Request,
workspace_id: str, knowledge_id: str, document_id: str, current_page: int, page_size: int): workspace_id: str, knowledge_id: str, document_id: str, current_page: int, page_size: int):
d = ParagraphSerializers.Query( d = ParagraphSerializers.Query(

View File

@ -5,7 +5,7 @@ from rest_framework.views import Request
from common.auth import TokenAuth 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 PermissionConstants from common.constants.permission_constants import PermissionConstants, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from common.utils.common import query_params_to_single_dict from common.utils.common import query_params_to_single_dict
@ -27,7 +27,10 @@ class ProblemView(APIView):
responses=ProblemReadAPI.get_response(), responses=ProblemReadAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_PROBLEM_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str):
q = ProblemSerializers.Query( q = ProblemSerializers.Query(
data={ data={
@ -49,11 +52,15 @@ class ProblemView(APIView):
request=ProblemBatchCreateAPI.get_request(), request=ProblemBatchCreateAPI.get_request(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='problem', operate='Create question', PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')) RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu='problem', operate='Create question',
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id'))
, workspace_id=lambda r, k: k.get('workspace_id') , workspace_id=lambda r, k: k.get('workspace_id')
) )
def post(self, request: Request, workspace_id: str, knowledge_id: str): def post(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(ProblemSerializers.Create( return result.success(ProblemSerializers.Create(
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id} data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
@ -70,7 +77,10 @@ class ProblemView(APIView):
responses=ProblemParagraphAPI.get_response(), responses=ProblemParagraphAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): def get(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
return result.success(ProblemSerializers.Operate( return result.success(ProblemSerializers.Operate(
data={ data={
@ -93,10 +103,15 @@ class ProblemView(APIView):
responses=BatchAssociationAPI.get_response(), responses=BatchAssociationAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='problem', operate='Batch associated paragraphs', PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='problem', operate='Batch associated paragraphs',
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(ProblemSerializers.BatchOperate( return result.success(ProblemSerializers.BatchOperate(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -115,10 +130,15 @@ class ProblemView(APIView):
responses=BatchDeleteAPI.get_response(), responses=BatchDeleteAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='problem', operate='Batch deletion issues', PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='problem', operate='Batch deletion issues',
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str):
return result.success(ProblemSerializers.BatchOperate( return result.success(ProblemSerializers.BatchOperate(
data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id}
@ -136,10 +156,15 @@ class ProblemView(APIView):
responses=ProblemDeleteAPI.get_response(), responses=ProblemDeleteAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_DELETE.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='problem', operate='Delete question', PermissionConstants.KNOWLEDGE_PROBLEM_DELETE.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='problem', operate='Delete question',
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def delete(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): def delete(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
return result.success(ProblemSerializers.Operate( return result.success(ProblemSerializers.Operate(
data={ data={
@ -160,10 +185,15 @@ class ProblemView(APIView):
responses=ProblemEditAPI.get_response(), responses=ProblemEditAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) @has_permissions(
@log(menu='problem', operate='Modify question', PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(),
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='problem', operate='Modify question',
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): def put(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
return result.success(ProblemSerializers.Operate( return result.success(ProblemSerializers.Operate(
data={ data={
@ -185,7 +215,10 @@ class ProblemView(APIView):
responses=ProblemPageAPI.get_response(), responses=ProblemPageAPI.get_response(),
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
) )
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_READ.get_workspace_knowledge_permission()) @has_permissions(
PermissionConstants.KNOWLEDGE_PROBLEM_READ.get_workspace_knowledge_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str, knowledge_id: str, current_page, page_size): def get(self, request: Request, workspace_id: str, knowledge_id: str, current_page, page_size):
d = ProblemSerializers.Query( d = ProblemSerializers.Query(
data={ data={

View File

@ -7,7 +7,7 @@ from rest_framework.views import APIView
from common.auth import TokenAuth 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 PermissionConstants from common.constants.permission_constants import PermissionConstants, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from tools.api.tool import ToolCreateAPI, ToolEditAPI, ToolReadAPI, ToolDeleteAPI, ToolTreeReadAPI, ToolDebugApi, \ from tools.api.tool import ToolCreateAPI, ToolEditAPI, ToolReadAPI, ToolDeleteAPI, ToolTreeReadAPI, ToolDebugApi, \
@ -38,9 +38,14 @@ class ToolView(APIView):
responses=ToolCreateAPI.get_response(), responses=ToolCreateAPI.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_CREATE.get_workspace_permission()) @has_permissions(
@log(menu="Tool", operate="Create tool", PermissionConstants.TOOL_CREATE.get_workspace_permission(),
get_operation_object=lambda r, k: r.data.get('name'), workspace_id=lambda r, k: k.get('workspace_id')) RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(
menu="Tool", operate="Create tool",
get_operation_object=lambda r, k: r.data.get('name'), workspace_id=lambda r, k: k.get('workspace_id')
)
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(ToolSerializer.Create( return result.success(ToolSerializer.Create(
data={'user_id': request.user.id, 'workspace_id': workspace_id} data={'user_id': request.user.id, 'workspace_id': workspace_id}
@ -55,7 +60,10 @@ class ToolView(APIView):
responses=ToolTreeReadAPI.get_response(), responses=ToolTreeReadAPI.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_READ.get_workspace_permission()) @has_permissions(
PermissionConstants.TOOL_READ.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def get(self, request: Request, workspace_id: str): def get(self, request: Request, workspace_id: str):
return result.success(ToolTreeSerializer( return result.success(ToolTreeSerializer(
data={'workspace_id': workspace_id} data={'workspace_id': workspace_id}
@ -73,7 +81,10 @@ class ToolView(APIView):
responses=ToolDebugApi.get_response(), responses=ToolDebugApi.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_DEBUG.get_workspace_permission()) @has_permissions(
PermissionConstants.TOOL_DEBUG.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(ToolSerializer.Debug( return result.success(ToolSerializer.Debug(
data={'workspace_id': workspace_id, 'user_id': request.user.id} data={'workspace_id': workspace_id, 'user_id': request.user.id}
@ -92,10 +103,15 @@ class ToolView(APIView):
responses=ToolEditAPI.get_response(), responses=ToolEditAPI.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_EDIT.get_workspace_permission()) @has_permissions(
@log(menu='Tool', operate='Update tool', PermissionConstants.TOOL_EDIT.get_workspace_permission(),
get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='Tool', operate='Update tool',
get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def put(self, request: Request, workspace_id: str, tool_id: str): def put(self, request: Request, workspace_id: str, tool_id: str):
return result.success(ToolSerializer.Operate( return result.success(ToolSerializer.Operate(
data={'id': tool_id, 'workspace_id': workspace_id} data={'id': tool_id, 'workspace_id': workspace_id}
@ -110,7 +126,10 @@ class ToolView(APIView):
responses=ToolReadAPI.get_response(), responses=ToolReadAPI.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_READ.get_workspace_permission()) @has_permissions(
PermissionConstants.TOOL_READ.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(menu='Tool', operate='Get tool') @log(menu='Tool', operate='Get tool')
def get(self, request: Request, workspace_id: str, tool_id: str): def get(self, request: Request, workspace_id: str, tool_id: str):
return result.success(ToolSerializer.Operate( return result.success(ToolSerializer.Operate(
@ -126,10 +145,15 @@ class ToolView(APIView):
responses=ToolDeleteAPI.get_response(), responses=ToolDeleteAPI.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_DELETE.get_workspace_permission()) @has_permissions(
@log(menu='Tool', operate="Delete tool", PermissionConstants.TOOL_DELETE.get_workspace_permission(),
get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='Tool', operate="Delete tool",
get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def delete(self, request: Request, workspace_id: str, tool_id: str): def delete(self, request: Request, workspace_id: str, tool_id: str):
return result.success(ToolSerializer.Operate( return result.success(ToolSerializer.Operate(
data={'id': tool_id, 'workspace_id': workspace_id} data={'id': tool_id, 'workspace_id': workspace_id}
@ -147,7 +171,10 @@ class ToolView(APIView):
responses=ToolPageAPI.get_response(), responses=ToolPageAPI.get_response(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_READ.get_workspace_permission()) @has_permissions(
PermissionConstants.TOOL_READ.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(menu='Tool', operate='Get tool list') @log(menu='Tool', operate='Get tool list')
def get(self, request: Request, workspace_id: str, current_page: int, page_size: int): def get(self, request: Request, workspace_id: str, current_page: int, page_size: int):
return result.success(ToolTreeSerializer.Query( return result.success(ToolTreeSerializer.Query(
@ -173,7 +200,10 @@ class ToolView(APIView):
responses=ToolImportAPI.get_response(), responses=ToolImportAPI.get_response(),
tags=[_("Tool")] # type: ignore tags=[_("Tool")] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_IMPORT.get_workspace_permission()) @has_permissions(
PermissionConstants.TOOL_IMPORT.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
@log(menu='Tool', operate='Import tool', workspace_id=lambda r, k: k.get('workspace_id')) @log(menu='Tool', operate='Import tool', workspace_id=lambda r, k: k.get('workspace_id'))
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(ToolSerializer.Import( return result.success(ToolSerializer.Import(
@ -192,10 +222,15 @@ class ToolView(APIView):
responses=ToolExportAPI.get_response(), responses=ToolExportAPI.get_response(),
tags=[_("Tool")] # type: ignore tags=[_("Tool")] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_EXPORT.get_workspace_permission()) @has_permissions(
@log(menu='Tool', operate="Export function", PermissionConstants.TOOL_EXPORT.get_workspace_permission(),
get_operation_object=lambda r, k: get_tool_operation_object(k.get('id')), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
workspace_id=lambda r, k: k.get('workspace_id')) )
@log(
menu='Tool', operate="Export function",
get_operation_object=lambda r, k: get_tool_operation_object(k.get('id')),
workspace_id=lambda r, k: k.get('workspace_id')
)
def get(self, request: Request, tool_id: str, workspace_id: str): def get(self, request: Request, tool_id: str, workspace_id: str):
return ToolSerializer.Operate( return ToolSerializer.Operate(
data={'id': tool_id, 'workspace_id': workspace_id} data={'id': tool_id, 'workspace_id': workspace_id}
@ -217,6 +252,7 @@ class ToolView(APIView):
@has_permissions( @has_permissions(
PermissionConstants.TOOL_CREATE.get_workspace_permission(), PermissionConstants.TOOL_CREATE.get_workspace_permission(),
PermissionConstants.TOOL_EDIT.get_workspace_permission(), PermissionConstants.TOOL_EDIT.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
) )
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(ToolSerializer.Pylint( return result.success(ToolSerializer.Pylint(
@ -237,7 +273,10 @@ class ToolView(APIView):
parameters=EditIconAPI.get_parameters(), parameters=EditIconAPI.get_parameters(),
tags=[_('Tool')] # type: ignore tags=[_('Tool')] # type: ignore
) )
@has_permissions(PermissionConstants.TOOL_EDIT.get_workspace_permission()) @has_permissions(
PermissionConstants.TOOL_EDIT.get_workspace_permission(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role()
)
def put(self, request: Request, tool_id: str, workspace_id: str): def put(self, request: Request, tool_id: str, workspace_id: str):
return result.success(ToolSerializer.IconOperate(data={ return result.success(ToolSerializer.IconOperate(data={
'id': tool_id, 'id': tool_id,