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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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