From ba0dcf6b1b497212226c2cc04438566d1d2dc968 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 11 Jun 2025 16:54:43 +0800 Subject: [PATCH] feat: enhance permission checks by incorporating role constants for workspace management --- apps/folders/views/folder.py | 64 +++--- apps/knowledge/views/document.py | 330 +++++++++++++++++++----------- apps/knowledge/views/knowledge.py | 157 +++++++++----- apps/knowledge/views/paragraph.py | 171 ++++++++++------ apps/knowledge/views/problem.py | 81 +++++--- apps/tools/views/tool.py | 83 ++++++-- 6 files changed, 584 insertions(+), 302 deletions(-) diff --git a/apps/folders/views/folder.py b/apps/folders/views/folder.py index a03ed12ab..4cde7c278 100644 --- a/apps/folders/views/folder.py +++ b/apps/folders/views/folder.py @@ -6,7 +6,7 @@ from rest_framework.views import APIView from common.auth import TokenAuth 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.result import result from folders.api.folder import FolderCreateAPI, FolderEditAPI, FolderReadAPI, FolderTreeReadAPI, FolderDeleteAPI @@ -36,12 +36,16 @@ class FolderView(APIView): responses=FolderCreateAPI.get_response(), tags=[_('Folder')] # type: ignore ) - @has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.CREATE, - resource_path=f"/WORKSPACE/{kwargs.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') - ) + @has_permissions( + lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.CREATE, + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(FolderSerializer.Create( data={'user_id': request.user.id, @@ -58,8 +62,11 @@ class FolderView(APIView): responses=FolderTreeReadAPI.get_response(), tags=[_('Folder')] # type: ignore ) - @has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.READ, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) + @has_permissions( + 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): return result.success(FolderTreeSerializer( data={'workspace_id': workspace_id, 'source': source} @@ -78,12 +85,16 @@ class FolderView(APIView): responses=FolderEditAPI.get_response(), tags=[_('Folder')] # type: ignore ) - @has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.EDIT, - resource_path=f"/WORKSPACE/{kwargs.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') - ) + @has_permissions( + lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.EDIT, + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(FolderSerializer.Operate( data={'id': folder_id, 'workspace_id': workspace_id, 'source': source} @@ -98,8 +109,11 @@ class FolderView(APIView): responses=FolderReadAPI.get_response(), tags=[_('Folder')] # type: ignore ) - @has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.READ, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")) + @has_permissions( + 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): return result.success(FolderSerializer.Operate( data={'id': folder_id, 'workspace_id': workspace_id, 'source': source} @@ -114,12 +128,16 @@ class FolderView(APIView): responses=FolderDeleteAPI.get_response(), tags=[_('Folder')] # type: ignore ) - @has_permissions(lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.DELETE, - resource_path=f"/WORKSPACE/{kwargs.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') - ) + @has_permissions( + lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.DELETE, + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}"), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(FolderSerializer.Operate( data={'id': folder_id, 'workspace_id': workspace_id, 'source': source} diff --git a/apps/knowledge/views/document.py b/apps/knowledge/views/document.py index ae1096835..bc102521a 100644 --- a/apps/knowledge/views/document.py +++ b/apps/knowledge/views/document.py @@ -6,7 +6,7 @@ from rest_framework.views import APIView from common.auth import TokenAuth 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.result import result from knowledge.api.document import DocumentSplitAPI, DocumentBatchAPI, DocumentBatchCreateAPI, DocumentCreateAPI, \ @@ -33,7 +33,10 @@ class DocumentView(APIView): responses=DocumentCreateAPI.get_response(), 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", get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), @@ -53,7 +56,10 @@ class DocumentView(APIView): responses=DocumentTreeReadAPI.get_response(), 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): return result.success(DocumentSerializers.Query( data={ @@ -77,7 +83,10 @@ class DocumentView(APIView): responses=DocumentReadAPI.get_response(), 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): operate = DocumentSerializers.Operate(data={ 'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id @@ -94,13 +103,17 @@ class DocumentView(APIView): responses=DocumentEditAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Operate(data={ 'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id @@ -114,13 +127,17 @@ class DocumentView(APIView): responses=DocumentDeleteAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): operate = DocumentSerializers.Operate(data={ 'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id @@ -145,6 +162,7 @@ class DocumentView(APIView): @has_permissions( PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.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): split_data = {'file': request.FILES.getlist('file')} @@ -190,12 +208,17 @@ class DocumentView(APIView): responses=BatchEditHitHandlingAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Batch( data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -214,12 +237,17 @@ class DocumentView(APIView): responses=SyncWebAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission()) - @log(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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Sync( data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -238,13 +266,17 @@ class DocumentView(APIView): responses=RefreshAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Operate( data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -262,12 +294,17 @@ class DocumentView(APIView): responses=CancelTaskAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Operate( data={'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -285,13 +322,17 @@ class DocumentView(APIView): responses=BatchCancelTaskAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Batch(data={ 'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -313,13 +354,15 @@ class DocumentView(APIView): @has_permissions( PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.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): return result.success(DocumentSerializers.Batch( data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -341,13 +384,15 @@ class DocumentView(APIView): @has_permissions( PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.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): return result.success(DocumentSerializers.Batch( data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -369,12 +414,15 @@ class DocumentView(APIView): @has_permissions( PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.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): return result.success(DocumentSerializers.Batch( data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id} @@ -395,13 +443,15 @@ class DocumentView(APIView): @has_permissions( PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.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): return result.success( DocumentSerializers.Batch( @@ -424,13 +474,15 @@ class DocumentView(APIView): @has_permissions( PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.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): return result.success(DocumentSerializers.BatchGenerateRelated( data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id} @@ -448,7 +500,10 @@ class DocumentView(APIView): responses=DocumentTreeReadAPI.get_response(), 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): return result.success(DocumentSerializers.Query( data={ @@ -471,13 +526,17 @@ class DocumentView(APIView): responses=DocumentExportAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return DocumentSerializers.Operate(data={ 'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id @@ -493,13 +552,17 @@ class DocumentView(APIView): responses=DocumentExportAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return DocumentSerializers.Operate(data={ '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 ) @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): return DocumentSerializers.Operate(data={ 'workspace_id': workspace_id, 'document_id': document_id, 'knowledge_id': knowledge_id @@ -533,13 +598,17 @@ class DocumentView(APIView): responses=DocumentMigrateAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(DocumentSerializers.Migrate( data={ @@ -563,13 +632,18 @@ class WebDocumentView(APIView): responses=WebDocumentCreateAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) - @log(menu='document', operate="Create Web site documents", - 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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + menu='document', operate="Create Web site documents", + 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): return result.success(DocumentSerializers.Create(data={ 'knowledge_id': knowledge_id, 'workspace_id': workspace_id @@ -589,13 +663,18 @@ class QaDocumentView(APIView): responses=QaDocumentCreateAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) - @log(menu='document', operate="Import QA and create documentation", - 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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + menu='document', operate="Import QA and create documentation", + 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): return result.success(DocumentSerializers.Create(data={ 'knowledge_id': knowledge_id, 'workspace_id': workspace_id @@ -615,13 +694,18 @@ class TableDocumentView(APIView): responses=TableDocumentCreateAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) - @log(menu='document', operate="Import tables and create documents", - 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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + menu='document', operate="Import tables and create documents", + 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): return result.success(DocumentSerializers.Create( data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} diff --git a/apps/knowledge/views/knowledge.py b/apps/knowledge/views/knowledge.py index c4f7c6052..629b14ee3 100644 --- a/apps/knowledge/views/knowledge.py +++ b/apps/knowledge/views/knowledge.py @@ -5,7 +5,7 @@ from rest_framework.views import APIView from common.auth import TokenAuth 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.result import result from knowledge.api.knowledge import KnowledgeBaseCreateAPI, KnowledgeWebCreateAPI, KnowledgeTreeReadAPI, \ @@ -28,7 +28,10 @@ class KnowledgeView(APIView): responses=KnowledgeTreeReadAPI.get_response(), 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): return result.success(KnowledgeSerializer.Query( data={ @@ -53,10 +56,15 @@ class KnowledgeView(APIView): responses=KnowledgeEditAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(KnowledgeSerializer.Operate( 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(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DELETE.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_DELETE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(KnowledgeSerializer.Operate( 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(), 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): return result.success(KnowledgeSerializer.Operate( 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(), 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): return result.success(KnowledgeSerializer.Query( data={ @@ -133,10 +152,15 @@ class KnowledgeView(APIView): responses=SyncWebAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_SYNC.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_SYNC.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(KnowledgeSerializer.SyncWeb( data={ @@ -160,7 +184,10 @@ class KnowledgeView(APIView): responses=HitTestAPI.get_response(), 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): return result.success(KnowledgeSerializer.HitTest( data={ @@ -187,10 +214,15 @@ class KnowledgeView(APIView): responses=EmbeddingAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_VECTOR.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_VECTOR.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(KnowledgeSerializer.Operate( 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(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return KnowledgeSerializer.Operate(data={ 'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id @@ -225,10 +262,15 @@ class KnowledgeView(APIView): responses=KnowledgeExportAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return KnowledgeSerializer.Operate(data={ 'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id @@ -247,11 +289,15 @@ class KnowledgeView(APIView): responses=GenerateRelatedAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_GENERATE.get_workspace_knowledge_permission()) - @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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_GENERATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(KnowledgeSerializer.Operate( 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(), 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): return result.success(ModelSerializer.Query( data={ @@ -290,7 +339,10 @@ class KnowledgeView(APIView): responses=GetModelAPI.get_response(), 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): return result.success(ModelSerializer.Query( data={ @@ -313,10 +365,15 @@ class KnowledgeBaseView(APIView): responses=KnowledgeBaseCreateAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(KnowledgeSerializer.Create( data={'user_id': request.user.id, 'workspace_id': workspace_id} @@ -336,15 +393,19 @@ class KnowledgeWebView(APIView): responses=KnowledgeWebCreateAPI.get_response(), tags=[_('Knowledge Base')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) - @log(menu='Knowledge Base', operate="Create a web site knowledge base", - 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')}} + @has_permissions( + PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + menu='Knowledge Base', operate="Create a web site knowledge base", + 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') - ) + ) def post(self, request: Request, workspace_id: str): return result.success(KnowledgeSerializer.Create( data={'user_id': request.user.id, 'workspace_id': workspace_id} diff --git a/apps/knowledge/views/paragraph.py b/apps/knowledge/views/paragraph.py index e76903b57..b3fb6664f 100644 --- a/apps/knowledge/views/paragraph.py +++ b/apps/knowledge/views/paragraph.py @@ -5,7 +5,7 @@ from rest_framework.views import Request from common.auth import TokenAuth 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.result import result from common.utils.common import query_params_to_single_dict @@ -28,7 +28,10 @@ class ParagraphView(APIView): responses=ParagraphReadAPI.get_response(), 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): q = ParagraphSerializers.Query( data={ @@ -49,13 +52,17 @@ class ParagraphView(APIView): responses=ParagraphCreateAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(ParagraphSerializers.Create( data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id} @@ -74,7 +81,10 @@ class ParagraphView(APIView): responses=ParagraphBatchDeleteAPI.get_response(), 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): return result.success(ParagraphSerializers.Batch( data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id} @@ -91,13 +101,17 @@ class ParagraphView(APIView): responses=ParagraphMigrateAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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, target_knowledge_id: str, target_document_id): return result.success( @@ -123,13 +137,17 @@ class ParagraphView(APIView): responses=ParagraphBatchGenerateRelatedAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(ParagraphSerializers.Batch( data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id} @@ -148,13 +166,17 @@ class ParagraphView(APIView): responses=ParagraphEditAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): o = ParagraphSerializers.Operate( data={ @@ -176,7 +198,10 @@ class ParagraphView(APIView): responses=ParagraphGetAPI.get_response(), 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): o = ParagraphSerializers.Operate( data={ @@ -197,13 +222,17 @@ class ParagraphView(APIView): parameters=ParagraphGetAPI.get_parameters(), responses=ParagraphGetAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')]) # type: ignore - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): o = ParagraphSerializers.Operate( data={ @@ -229,13 +258,17 @@ class ParagraphView(APIView): responses=ProblemCreateAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(ParagraphSerializers.Problem( data={ @@ -255,7 +288,10 @@ class ParagraphView(APIView): responses=ParagraphGetAPI.get_response(), 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): return result.success(ParagraphSerializers.Problem( data={ @@ -279,13 +315,17 @@ class ParagraphView(APIView): responses=UnAssociationAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @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')) - ) - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ParagraphSerializers.Association( data={ @@ -310,13 +350,17 @@ class ParagraphView(APIView): responses=AssociationAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission()) - @log(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') - ) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @log( + 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): return result.success(ParagraphSerializers.Association( data={ @@ -340,7 +384,10 @@ class ParagraphView(APIView): responses=ParagraphPageAPI.get_response(), 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, current_page: int, page_size: int): d = ParagraphSerializers.Query( diff --git a/apps/knowledge/views/problem.py b/apps/knowledge/views/problem.py index 0871b5286..8b0bd8a7b 100644 --- a/apps/knowledge/views/problem.py +++ b/apps/knowledge/views/problem.py @@ -5,7 +5,7 @@ from rest_framework.views import Request from common.auth import TokenAuth 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.result import result from common.utils.common import query_params_to_single_dict @@ -27,7 +27,10 @@ class ProblemView(APIView): responses=ProblemReadAPI.get_response(), 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): q = ProblemSerializers.Query( data={ @@ -49,11 +52,15 @@ class ProblemView(APIView): request=ProblemBatchCreateAPI.get_request(), tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) - @log(menu='problem', operate='Create question', - get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')) + @has_permissions( + PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(), + 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') - ) + ) def post(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(ProblemSerializers.Create( data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id} @@ -70,7 +77,10 @@ class ProblemView(APIView): responses=ProblemParagraphAPI.get_response(), 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): return result.success(ProblemSerializers.Operate( data={ @@ -93,10 +103,15 @@ class ProblemView(APIView): responses=BatchAssociationAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ProblemSerializers.BatchOperate( data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -115,10 +130,15 @@ class ProblemView(APIView): responses=BatchDeleteAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ProblemSerializers.BatchOperate( data={'knowledge_id': knowledge_id, 'workspace_id': workspace_id} @@ -136,10 +156,15 @@ class ProblemView(APIView): responses=ProblemDeleteAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_DELETE.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_PROBLEM_DELETE.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ProblemSerializers.Operate( data={ @@ -160,10 +185,15 @@ class ProblemView(APIView): responses=ProblemEditAPI.get_response(), tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission()) - @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')) + @has_permissions( + PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ProblemSerializers.Operate( data={ @@ -185,7 +215,10 @@ class ProblemView(APIView): responses=ProblemPageAPI.get_response(), 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): d = ProblemSerializers.Query( data={ diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py index adf0ce1b1..752dcaaeb 100644 --- a/apps/tools/views/tool.py +++ b/apps/tools/views/tool.py @@ -7,7 +7,7 @@ from rest_framework.views import APIView from common.auth import TokenAuth 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.result import result from tools.api.tool import ToolCreateAPI, ToolEditAPI, ToolReadAPI, ToolDeleteAPI, ToolTreeReadAPI, ToolDebugApi, \ @@ -38,9 +38,14 @@ class ToolView(APIView): responses=ToolCreateAPI.get_response(), tags=[_('Tool')] # type: ignore ) - @has_permissions(PermissionConstants.TOOL_CREATE.get_workspace_permission()) - @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')) + @has_permissions( + PermissionConstants.TOOL_CREATE.get_workspace_permission(), + 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): return result.success(ToolSerializer.Create( data={'user_id': request.user.id, 'workspace_id': workspace_id} @@ -55,7 +60,10 @@ class ToolView(APIView): responses=ToolTreeReadAPI.get_response(), 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): return result.success(ToolTreeSerializer( data={'workspace_id': workspace_id} @@ -73,7 +81,10 @@ class ToolView(APIView): responses=ToolDebugApi.get_response(), 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): return result.success(ToolSerializer.Debug( data={'workspace_id': workspace_id, 'user_id': request.user.id} @@ -92,10 +103,15 @@ class ToolView(APIView): responses=ToolEditAPI.get_response(), tags=[_('Tool')] # type: ignore ) - @has_permissions(PermissionConstants.TOOL_EDIT.get_workspace_permission()) - @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')) + @has_permissions( + PermissionConstants.TOOL_EDIT.get_workspace_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ToolSerializer.Operate( data={'id': tool_id, 'workspace_id': workspace_id} @@ -110,7 +126,10 @@ class ToolView(APIView): responses=ToolReadAPI.get_response(), 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') def get(self, request: Request, workspace_id: str, tool_id: str): return result.success(ToolSerializer.Operate( @@ -126,10 +145,15 @@ class ToolView(APIView): responses=ToolDeleteAPI.get_response(), tags=[_('Tool')] # type: ignore ) - @has_permissions(PermissionConstants.TOOL_DELETE.get_workspace_permission()) - @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')) + @has_permissions( + PermissionConstants.TOOL_DELETE.get_workspace_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return result.success(ToolSerializer.Operate( data={'id': tool_id, 'workspace_id': workspace_id} @@ -147,7 +171,10 @@ class ToolView(APIView): responses=ToolPageAPI.get_response(), 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') def get(self, request: Request, workspace_id: str, current_page: int, page_size: int): return result.success(ToolTreeSerializer.Query( @@ -173,7 +200,10 @@ class ToolView(APIView): responses=ToolImportAPI.get_response(), 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')) def post(self, request: Request, workspace_id: str): return result.success(ToolSerializer.Import( @@ -192,10 +222,15 @@ class ToolView(APIView): responses=ToolExportAPI.get_response(), tags=[_("Tool")] # type: ignore ) - @has_permissions(PermissionConstants.TOOL_EXPORT.get_workspace_permission()) - @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')) + @has_permissions( + PermissionConstants.TOOL_EXPORT.get_workspace_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() + ) + @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): return ToolSerializer.Operate( data={'id': tool_id, 'workspace_id': workspace_id} @@ -217,6 +252,7 @@ class ToolView(APIView): @has_permissions( PermissionConstants.TOOL_CREATE.get_workspace_permission(), PermissionConstants.TOOL_EDIT.get_workspace_permission(), + RoleConstants.WORKSPACE_MANAGE.get_workspace_role() ) def post(self, request: Request, workspace_id: str): return result.success(ToolSerializer.Pylint( @@ -237,7 +273,10 @@ class ToolView(APIView): parameters=EditIconAPI.get_parameters(), 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): return result.success(ToolSerializer.IconOperate(data={ 'id': tool_id,