diff --git a/apps/application/views/application.py b/apps/application/views/application.py index f69cab32b..e8eefadc2 100644 --- a/apps/application/views/application.py +++ b/apps/application/views/application.py @@ -48,7 +48,8 @@ class Application(APIView): ) @has_permissions(PermissionConstants.APPLICATION_READ.get_workspace_permission()) @log(menu='Application', operate='Create an application', - get_operation_object=lambda r, k: {'name': r.data.get('name')}) + 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): return result.success( ApplicationSerializer(data={'workspace_id': workspace_id, 'user_id': request.user.id}).insert(request.data)) @@ -99,7 +100,7 @@ class Application(APIView): tags=[_('Application')] # type: ignore ) @has_permissions(PermissionConstants.APPLICATION_READ) - @log(menu='Application', operate="Import Application") + @log(menu='Application', operate="Import Application", workspace_id=lambda r, k: k.get('workspace_id')) def post(self, request: Request, workspace_id: str): return result.success(ApplicationSerializer( data={'user_id': request.user.id, 'workspace_id': workspace_id, @@ -120,7 +121,8 @@ class Application(APIView): ) @has_permissions(PermissionConstants.APPLICATION_EXPORT.get_workspace_application_permission()) @log(menu='Application', operate="Export Application", - get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id'))) + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def post(self, request: Request, workspace_id: str, application_id: str): return ApplicationOperateSerializer( data={'application_id': application_id, @@ -140,7 +142,8 @@ class Application(APIView): ) @has_permissions(PermissionConstants.APPLICATION_DELETE.get_workspace_application_permission()) @log(menu='Application', operate='Deleting application', - get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')) + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id') ) def delete(self, request: Request, workspace_id: str, application_id: str): return result.success(ApplicationOperateSerializer( @@ -159,7 +162,8 @@ class Application(APIView): ) @has_permissions(PermissionConstants.APPLICATION_EDIT.get_workspace_application_permission()) @log(menu='Application', operate="Modify the application", - get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id'))) + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def put(self, request: Request, workspace_id: str, application_id: str): return result.success( ApplicationOperateSerializer( @@ -195,7 +199,8 @@ class Application(APIView): tags=[_('Application')] # type: ignore ) @log(menu='Application', operate='Publishing an application', - get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')) + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id') ) def put(self, request: Request, application_id: str): return result.success( diff --git a/apps/application/views/application_api_key.py b/apps/application/views/application_api_key.py index 84ca17503..2b44d4be2 100644 --- a/apps/application/views/application_api_key.py +++ b/apps/application/views/application_api_key.py @@ -5,7 +5,7 @@ from rest_framework.request import Request from rest_framework.views import APIView from application.api.application_api_key import ApplicationKeyAPI -from application.models import ApplicationApiKey +from application.models import ApplicationApiKey, Application from application.serializers.application_api_key import ApplicationKeySerializer from common.auth import TokenAuth from common.auth.authentication import has_permissions @@ -14,11 +14,11 @@ from common.log.log import log from common.result import result, success, DefaultResultSerializer -def get_application_operation_object(application_api_key_id): - application_api_key_model = QuerySet(model=ApplicationApiKey).filter(id=application_api_key_id).first() - if application_api_key_model is not None: +def get_application_operation_object(application_id): + application_model = QuerySet(model=Application).filter(id=application_id).first() + if application_model is not None: return { - "name": application_api_key_model.name + "name": application_model.name } return {} @@ -37,7 +37,8 @@ class ApplicationKey(APIView): tags=[_('Application Api Key')] # type: ignore ) @log(menu='Application', operate="Add ApiKey", - get_operation_object=lambda r, k: get_application_operation_object(k.get('application_api_key_id'))) + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id')) @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission()) def post(self, request: Request, workspace_id: str, application_id: str): return result.success(ApplicationKeySerializer( @@ -73,6 +74,9 @@ class ApplicationKey(APIView): tags=[_('Application Api Key')] # type: ignore ) @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission()) + @log(menu='Application', operate="Modify application API_KEY", + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def put(self, request: Request, workspace_id: str, application_id: str, api_key_id: str): return result.success( ApplicationKeySerializer.Operate( @@ -91,6 +95,9 @@ class ApplicationKey(APIView): tags=[_('Application Api Key')] # type: ignore ) @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission()) + @log(menu='Application', operate="Delete application API_KEY", + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def delete(self, request: Request, workspace_id: str, application_id: str, api_key_id: str): return result.success( ApplicationKeySerializer.Operate( diff --git a/apps/application/views/application_version.py b/apps/application/views/application_version.py index 3aa105c02..f686c8032 100644 --- a/apps/application/views/application_version.py +++ b/apps/application/views/application_version.py @@ -92,7 +92,8 @@ class ApplicationVersionView(APIView): ) @has_permissions(PermissionConstants.APPLICATION_EDIT.get_workspace_application_permission()) @log(menu='Application', operate="Modify application version information", - get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id'))) + get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def put(self, request: Request, workspace_id: str, application_id: str, work_flow_version_id: str): return result.success( ApplicationVersionSerializer.Operate( diff --git a/apps/common/log/log.py b/apps/common/log/log.py index 0c4f5466d..6f2eb9ac1 100644 --- a/apps/common/log/log.py +++ b/apps/common/log/log.py @@ -57,7 +57,7 @@ def _get_details(request): def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address, get_details=_get_details, - get_operation_object=None): + get_operation_object=None, workspace_id="None"): """ 记录审计日志 @param menu: 操作菜单 str @@ -92,7 +92,7 @@ def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address, _operate = operate(request) # 插入审计日志 Log(menu=menu, operate=_operate, user=user, status=status, ip_address=ip, details=details, - operation_object=operation_object).save() + operation_object=operation_object, workspace_id=workspace_id).save() return run diff --git a/apps/folders/views/folder.py b/apps/folders/views/folder.py index e7a488066..a03ed12ab 100644 --- a/apps/folders/views/folder.py +++ b/apps/folders/views/folder.py @@ -10,25 +10,18 @@ from common.constants.permission_constants import Permission, Group, Operate from common.log.log import log from common.result import result from folders.api.folder import FolderCreateAPI, FolderEditAPI, FolderReadAPI, FolderTreeReadAPI, FolderDeleteAPI -from folders.models.folder import FolderCreateRequest, FolderEditRequest -from folders.serializers.folder import FolderSerializer, FolderTreeSerializer +from folders.serializers.folder import FolderSerializer, FolderTreeSerializer, get_folder_type -def get_folder_create_operation_object(folder_name): - folder_model = QuerySet(model=FolderCreateRequest).filter(name=folder_name).first() +def get_folder_operation_object(folder_id, source): + Folder = get_folder_type(source) + folder_model = QuerySet(model=Folder).filter(id=folder_id).first() if folder_model is not None: return { 'name': folder_model.name } return {} -def get_folder_edit_operation_object(folder_name): - folder_model = QuerySet(model=FolderEditRequest).filter(name=folder_name).first() - if folder_model is not None: - return { - 'name': folder_model.name - } - return {} class FolderView(APIView): authentication_classes = [TokenAuth] @@ -46,7 +39,8 @@ class FolderView(APIView): @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: get_folder_create_operation_object(k.get('folder_name')) + 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( @@ -87,7 +81,8 @@ class FolderView(APIView): @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_edit_operation_object(k.get('folder_name')) + 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( @@ -121,7 +116,10 @@ class FolderView(APIView): ) @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') + @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/common.py b/apps/knowledge/views/common.py index b149785d5..62a7e4bb6 100644 --- a/apps/knowledge/views/common.py +++ b/apps/knowledge/views/common.py @@ -3,7 +3,6 @@ from django.db.models import QuerySet from knowledge.models import Document - def get_document_operation_object(document_id: str): document_model = QuerySet(model=Document).filter(id=document_id).first() if document_model is not None: @@ -13,6 +12,7 @@ def get_document_operation_object(document_id: str): } return {} + def get_document_operation_object_batch(document_id_list: str): document_model_list = QuerySet(model=Document).filter(id__in=document_id_list) if document_model_list is not None: @@ -32,4 +32,4 @@ def get_knowledge_document_operation_object(knowledge_dict: dict, document_dict: 'dataset_type': knowledge_dict.get("type", ""), 'document_name': document_dict.get("name", ""), 'document_type': document_dict.get("type", ""), - } \ No newline at end of file + } diff --git a/apps/knowledge/views/document.py b/apps/knowledge/views/document.py index 3e794724a..ae1096835 100644 --- a/apps/knowledge/views/document.py +++ b/apps/knowledge/views/document.py @@ -37,7 +37,7 @@ class DocumentView(APIView): @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')), - {'name': r.data.get('name')})) + {'name': r.data.get('name')}), 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( @@ -99,7 +99,7 @@ class DocumentView(APIView): 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={ @@ -119,7 +119,7 @@ class DocumentView(APIView): 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={ @@ -194,7 +194,8 @@ class DocumentView(APIView): @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')))) + 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} @@ -218,7 +219,7 @@ class DocumentView(APIView): 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} @@ -242,7 +243,7 @@ class DocumentView(APIView): 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( @@ -266,7 +267,7 @@ class DocumentView(APIView): 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} @@ -289,7 +290,7 @@ class DocumentView(APIView): 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={ @@ -317,7 +318,7 @@ class DocumentView(APIView): 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}) + '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( @@ -344,7 +345,8 @@ class DocumentView(APIView): @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'))) + 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( @@ -371,7 +373,8 @@ class DocumentView(APIView): @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')))) + 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} @@ -397,7 +400,7 @@ class DocumentView(APIView): 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( @@ -426,7 +429,7 @@ class DocumentView(APIView): 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( @@ -473,7 +476,7 @@ class DocumentView(APIView): 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={ @@ -495,7 +498,7 @@ class DocumentView(APIView): 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={ @@ -512,7 +515,8 @@ class DocumentView(APIView): responses=DocumentDownloadSourceAPI.get_response(), tags=[_('Knowledge Base/Documentation')] # type: ignore ) - @has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_DOWNLOAD_SOURCE_FILE.get_workspace_knowledge_permission()) + @has_permissions( + PermissionConstants.KNOWLEDGE_DOCUMENT_DOWNLOAD_SOURCE_FILE.get_workspace_knowledge_permission()) 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 @@ -534,7 +538,7 @@ class DocumentView(APIView): 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( @@ -564,7 +568,8 @@ class WebDocumentView(APIView): 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", [])]})) + '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,7 +594,8 @@ class QaDocumentView(APIView): 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")]})) + '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 @@ -614,7 +620,8 @@ class TableDocumentView(APIView): 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")]})) + '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 1db750364..c4f7c6052 100644 --- a/apps/knowledge/views/knowledge.py +++ b/apps/knowledge/views/knowledge.py @@ -55,7 +55,8 @@ class KnowledgeView(APIView): ) @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'))) + 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} @@ -73,7 +74,8 @@ class KnowledgeView(APIView): ) @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'))) + 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} @@ -133,7 +135,8 @@ class KnowledgeView(APIView): ) @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'))) + 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={ @@ -186,7 +189,8 @@ class KnowledgeView(APIView): ) @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'))) + 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} @@ -204,7 +208,8 @@ class KnowledgeView(APIView): ) @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'))) + 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 @@ -222,7 +227,8 @@ class KnowledgeView(APIView): ) @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'))) + 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 @@ -243,7 +249,8 @@ class KnowledgeView(APIView): ) @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')) + 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( @@ -308,7 +315,8 @@ class KnowledgeBaseView(APIView): ) @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')}) + 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} @@ -330,11 +338,12 @@ class KnowledgeWebView(APIView): ) @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')}} + 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( diff --git a/apps/knowledge/views/paragraph.py b/apps/knowledge/views/paragraph.py index c94bf89a5..e76903b57 100644 --- a/apps/knowledge/views/paragraph.py +++ b/apps/knowledge/views/paragraph.py @@ -51,11 +51,11 @@ class ParagraphView(APIView): ) @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')) - ) - ) + 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} @@ -96,7 +96,7 @@ class ParagraphView(APIView): 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): @@ -128,7 +128,7 @@ class ParagraphView(APIView): 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( @@ -153,7 +153,7 @@ class ParagraphView(APIView): 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( @@ -202,7 +202,7 @@ class ParagraphView(APIView): 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( @@ -234,7 +234,7 @@ class ParagraphView(APIView): 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( @@ -315,7 +315,7 @@ class ParagraphView(APIView): 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( diff --git a/apps/knowledge/views/problem.py b/apps/knowledge/views/problem.py index 9b8942bd0..0871b5286 100644 --- a/apps/knowledge/views/problem.py +++ b/apps/knowledge/views/problem.py @@ -52,6 +52,7 @@ class ProblemView(APIView): @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')) + , 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( @@ -94,7 +95,8 @@ class ProblemView(APIView): ) @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'))) + 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,7 +117,8 @@ class ProblemView(APIView): ) @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'))) + 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} @@ -135,7 +138,8 @@ class ProblemView(APIView): ) @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'))) + 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={ @@ -158,7 +162,8 @@ class ProblemView(APIView): ) @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'))) + 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={ diff --git a/apps/models_provider/views/model.py b/apps/models_provider/views/model.py index 8925198e2..bccfffdee 100644 --- a/apps/models_provider/views/model.py +++ b/apps/models_provider/views/model.py @@ -67,7 +67,7 @@ class ModelSetting(APIView): @has_permissions(PermissionConstants.MODEL_CREATE.get_workspace_permission()) @log(menu='model', operate='Create model', get_operation_object=lambda r, k: {'name': r.date.get('name')}, - get_details=get_edit_model_details + get_details=get_edit_model_details, workspace_id=lambda r, k: k.get('workspace_id') ) def post(self, request: Request, workspace_id: str): return result.success( @@ -114,7 +114,7 @@ class ModelSetting(APIView): @has_permissions(PermissionConstants.MODEL_EDIT.get_workspace_permission()) @log(menu='model', operate='Update model', get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')), - get_details=get_edit_model_details + get_details=get_edit_model_details, workspace_id=lambda r, k: k.get('workspace_id') ) def put(self, request: Request, workspace_id, model_id: str): return result.success( @@ -130,7 +130,8 @@ class ModelSetting(APIView): tags=[_('Model')]) # type: ignore @has_permissions(PermissionConstants.MODEL_DELETE.get_workspace_permission()) @log(menu='model', operate='Delete model', - get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id'))) + get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def delete(self, request: Request, workspace_id: str, model_id: str): return result.success( ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).delete()) @@ -172,7 +173,8 @@ class ModelSetting(APIView): tags=[_('Model')]) # type: ignore @has_permissions(PermissionConstants.MODEL_READ.get_workspace_permission()) @log(menu='model', operate='Save model parameter form', - get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id'))) + get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')), + workspace_id=lambda r, k: k.get('workspace_id')) def put(self, request: Request, workspace_id: str, model_id: str): return result.success( ModelSerializer.ModelParams(data={'id': model_id}).save_model_params_form(request.data)) diff --git a/apps/models_provider/views/provide.py b/apps/models_provider/views/provide.py index f14ada053..5969d3869 100644 --- a/apps/models_provider/views/provide.py +++ b/apps/models_provider/views/provide.py @@ -9,7 +9,6 @@ from common import result from common.auth import TokenAuth from common.auth.authentication import has_permissions from common.constants.permission_constants import PermissionConstants -from common.log.log import log from models_provider.api.provide import ProvideApi from models_provider.constants.model_provider_constants import ModelProvideConstants from models_provider.serializers.model_serializer import get_default_model_params_setting @@ -25,7 +24,6 @@ class Provide(APIView): responses=ProvideApi.get_response(), tags=[_('Model')]) # type: ignore @has_permissions(PermissionConstants.MODEL_READ) - @log(menu='model',operate='Get a list of model suppliers') def get(self, request: Request): model_type = request.query_params.get('model_type') if model_type: diff --git a/apps/system_manage/models/log_management.py b/apps/system_manage/models/log_management.py index d7d987cf5..2150d1614 100644 --- a/apps/system_manage/models/log_management.py +++ b/apps/system_manage/models/log_management.py @@ -33,6 +33,7 @@ class Log(AppModelMixin): ip_address = models.CharField(max_length=128, verbose_name="ip地址") details = models.JSONField(verbose_name="详情", default=dict, encoder=SystemEncoder) + workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True) class Meta: db_table = "log" diff --git a/apps/system_manage/views/email_setting.py b/apps/system_manage/views/email_setting.py index 61deb8937..3a0229994 100644 --- a/apps/system_manage/views/email_setting.py +++ b/apps/system_manage/views/email_setting.py @@ -24,13 +24,13 @@ from models_provider.api.model import DefaultModelResponse from system_manage.api.email_setting import EmailSettingAPI from system_manage.serializers.email_setting import EmailSettingSerializer + def encryption_str(_value): if isinstance(_value, str): return encryption(_value) return _value - def get_email_details(request): path = request.path body = request.data @@ -55,7 +55,7 @@ class SystemSetting(APIView): responses=EmailSettingAPI.get_response(), tags=[_('Email Settings')]) # type: ignore @log(menu='Email settings', operate='Create or update email settings', - get_details=get_email_details) + get_details=get_email_details, workspace_id='None') @has_permissions(PermissionConstants.EMAIL_SETTING_EDIT) def put(self, request: Request): return result.success( @@ -71,8 +71,8 @@ class SystemSetting(APIView): tags=[_('Email Settings')] # type: ignore ) @has_permissions(PermissionConstants.EMAIL_SETTING_EDIT) - @log(menu='Email settings',operate='Test email settings', - get_details=get_email_details + @log(menu='Email settings', operate='Test email settings', + get_details=get_email_details, workspace_id='None' ) def post(self, request: Request): return result.success( diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py index bd15cae5c..a3c2da3c5 100644 --- a/apps/tools/views/tool.py +++ b/apps/tools/views/tool.py @@ -24,6 +24,7 @@ def get_tool_operation_object(tool_id): } return {} + class ToolView(APIView): authentication_classes = [TokenAuth] @@ -39,7 +40,7 @@ class ToolView(APIView): ) @has_permissions(PermissionConstants.TOOL_CREATE.get_workspace_permission()) @log(menu="Tool", operate="Create tool", - get_operation_object=lambda r,k: r.data.get('name')) + 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} @@ -93,7 +94,8 @@ class ToolView(APIView): ) @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'))) + 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} @@ -126,7 +128,8 @@ class ToolView(APIView): ) @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'))) + 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} @@ -171,7 +174,7 @@ class ToolView(APIView): tags=[_("Tool")] # type: ignore ) @has_permissions(PermissionConstants.TOOL_IMPORT.get_workspace_permission()) - @log(menu='Tool', operate='Import tool') + @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( data={'workspace_id': workspace_id, 'file': request.FILES.get('file'), 'user_id': request.user.id} @@ -191,7 +194,8 @@ class ToolView(APIView): ) @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'))) + 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}