mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
feat: System operate log
This commit is contained in:
parent
09dfedac9b
commit
e63572b89b
|
|
@ -6,6 +6,7 @@
|
|||
@date:2025/5/26 16:51
|
||||
@desc:
|
||||
"""
|
||||
from django.db.models import QuerySet
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.parsers import MultiPartParser
|
||||
|
|
@ -14,11 +15,22 @@ from rest_framework.views import APIView
|
|||
|
||||
from application.api.application_api import ApplicationCreateAPI, ApplicationQueryAPI, ApplicationImportAPI, \
|
||||
ApplicationExportAPI, ApplicationOperateAPI, ApplicationEditAPI
|
||||
from application.models import Application
|
||||
from application.serializers.application import ApplicationSerializer, Query, ApplicationOperateSerializer
|
||||
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
|
||||
|
||||
|
||||
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_model.name
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
class Application(APIView):
|
||||
|
|
@ -35,6 +47,8 @@ class Application(APIView):
|
|||
tags=[_('Application')] # type: ignore
|
||||
)
|
||||
@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')})
|
||||
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))
|
||||
|
|
@ -85,11 +99,14 @@ class Application(APIView):
|
|||
tags=[_('Application')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ)
|
||||
@log(menu='Application', operate="Import Application")
|
||||
def post(self, request: Request, workspace_id: str):
|
||||
return result.success(ApplicationSerializer(
|
||||
data={'user_id': request.user.id, 'workspace_id': workspace_id,
|
||||
}).import_({'file': request.FILES.get('file')}))
|
||||
|
||||
|
||||
|
||||
class Export(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
|
|
@ -104,6 +121,8 @@ class Application(APIView):
|
|||
tags=[_('Application')] # type: ignore
|
||||
)
|
||||
@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')))
|
||||
def post(self, request: Request, workspace_id: str, application_id: str):
|
||||
return ApplicationOperateSerializer(
|
||||
data={'application_id': application_id,
|
||||
|
|
@ -122,6 +141,9 @@ class Application(APIView):
|
|||
tags=[_('Application')] # type: ignore
|
||||
)
|
||||
@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'))
|
||||
)
|
||||
def delete(self, request: Request, workspace_id: str, application_id: str):
|
||||
return result.success(ApplicationOperateSerializer(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).delete(
|
||||
|
|
@ -138,6 +160,8 @@ class Application(APIView):
|
|||
tags=[_('Application')] # type: ignore
|
||||
)
|
||||
@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')))
|
||||
def put(self, request: Request, workspace_id: str, application_id: str):
|
||||
return result.success(
|
||||
ApplicationOperateSerializer(
|
||||
|
|
@ -172,6 +196,9 @@ class Application(APIView):
|
|||
responses=result.DefaultResultSerializer,
|
||||
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'))
|
||||
)
|
||||
def put(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationOperateSerializer(
|
||||
|
|
|
|||
|
|
@ -1,14 +1,26 @@
|
|||
from django.db.models import QuerySet
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from application.api.application_api_key import ApplicationKeyCreateAPI
|
||||
from application.models import ApplicationApiKey
|
||||
from application.serializers.application_api_key import ApplicationKeySerializer
|
||||
from common.auth import TokenAuth
|
||||
from common.log.log import log
|
||||
from common.result import result, success
|
||||
|
||||
|
||||
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:
|
||||
return {
|
||||
"name": application_api_key_model.name
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
class ApplicationKey(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
|
|
@ -20,6 +32,8 @@ class ApplicationKey(APIView):
|
|||
parameters=ApplicationKeyCreateAPI.get_parameters(),
|
||||
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')))
|
||||
def post(self,request: Request, application_id: str, workspace_id: str):
|
||||
return result.success(ApplicationKeySerializer(
|
||||
data={'application_id': application_id, 'user_id': request.user.id,
|
||||
|
|
|
|||
|
|
@ -14,10 +14,12 @@ from rest_framework.views import APIView
|
|||
from application.api.application_version import ApplicationVersionListAPI, ApplicationVersionPageAPI, \
|
||||
ApplicationVersionAPI, ApplicationVersionOperateAPI
|
||||
from application.serializers.application_version import ApplicationVersionSerializer
|
||||
from application.views import get_application_operation_object
|
||||
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
|
||||
|
||||
|
||||
class ApplicationVersionView(APIView):
|
||||
|
|
@ -88,6 +90,8 @@ class ApplicationVersionView(APIView):
|
|||
responses=ApplicationVersionOperateAPI.get_response(),
|
||||
tags=[_('Application/Version')] # type: ignore
|
||||
)
|
||||
@log(menu='Application', operate="Modify application version information",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, workspace_id: str, application_id: str, work_flow_version_id: str):
|
||||
return result.success(
|
||||
ApplicationVersionSerializer.Operate(
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
from django.db.models import QuerySet
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.request import Request
|
||||
|
|
@ -6,11 +7,29 @@ from rest_framework.views import APIView
|
|||
from common.auth import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import Permission, Group, Operate
|
||||
from common.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
|
||||
|
||||
|
||||
def get_folder_create_operation_object(folder_name):
|
||||
folder_model = QuerySet(model=FolderCreateRequest).filter(name=folder_name).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]
|
||||
|
||||
|
|
@ -26,6 +45,9 @@ 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'))
|
||||
)
|
||||
def post(self, request: Request, workspace_id: str, source: str):
|
||||
return result.success(FolderSerializer.Create(
|
||||
data={'user_id': request.user.id,
|
||||
|
|
@ -64,6 +86,9 @@ 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'))
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, source: str, folder_id: str):
|
||||
return result.success(FolderSerializer.Operate(
|
||||
data={'id': folder_id, 'workspace_id': workspace_id, 'source': source}
|
||||
|
|
@ -96,6 +121,7 @@ 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')
|
||||
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}
|
||||
|
|
|
|||
|
|
@ -221,3 +221,17 @@ def or_get(exists_problem_list, content, knowledge_id, document_id, paragraph_id
|
|||
problem = Problem(id=uuid.uuid7(), content=content, knowledge_id=knowledge_id)
|
||||
problem_content_dict[content] = problem, True
|
||||
return problem, document_id, paragraph_id
|
||||
|
||||
|
||||
|
||||
def get_knowledge_operation_object(knowledge_id: str):
|
||||
knowledge_model = QuerySet(model=Knowledge).filter(id=knowledge_id).first()
|
||||
if knowledge_model is not None:
|
||||
return {
|
||||
"name": knowledge_model.name,
|
||||
"desc": knowledge_model.desc,
|
||||
"type": knowledge_model.type,
|
||||
"create_time": knowledge_model.create_time,
|
||||
"update_time": knowledge_model.update_time
|
||||
}
|
||||
return {}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
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:
|
||||
return {
|
||||
"name": document_model.name,
|
||||
"type": document_model.type,
|
||||
}
|
||||
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:
|
||||
return {
|
||||
"name": f'[{",".join([document_model.name for document_model in document_model_list])}]',
|
||||
'document_list': [{'name': document_model.name, 'type': document_model.type} for document_model in
|
||||
document_model_list]
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_knowledge_document_operation_object(knowledge_dict: dict, document_dict: dict):
|
||||
return {
|
||||
'name': f'{knowledge_dict.get("name", "")}/{document_dict.get("name", "")}',
|
||||
'dataset_name': knowledge_dict.get("name", ""),
|
||||
'dataset_desc': knowledge_dict.get("desc", ""),
|
||||
'dataset_type': knowledge_dict.get("type", ""),
|
||||
'document_name': document_dict.get("name", ""),
|
||||
'document_type': document_dict.get("type", ""),
|
||||
}
|
||||
|
|
@ -7,13 +7,17 @@ from rest_framework.views import APIView
|
|||
from common.auth import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from knowledge.api.document import DocumentSplitAPI, DocumentBatchAPI, DocumentBatchCreateAPI, DocumentCreateAPI, \
|
||||
DocumentReadAPI, DocumentEditAPI, DocumentDeleteAPI, TableDocumentCreateAPI, QaDocumentCreateAPI, \
|
||||
WebDocumentCreateAPI, CancelTaskAPI, BatchCancelTaskAPI, SyncWebAPI, RefreshAPI, BatchEditHitHandlingAPI, \
|
||||
DocumentTreeReadAPI, DocumentSplitPatternAPI, BatchRefreshAPI, BatchGenerateRelatedAPI, TemplateExportAPI, \
|
||||
DocumentExportAPI, DocumentMigrateAPI, DocumentDownloadSourceAPI
|
||||
from knowledge.serializers.common import get_knowledge_operation_object
|
||||
from knowledge.serializers.document import DocumentSerializers
|
||||
from knowledge.views.common import get_knowledge_document_operation_object, get_document_operation_object_batch, \
|
||||
get_document_operation_object
|
||||
|
||||
|
||||
class DocumentView(APIView):
|
||||
|
|
@ -30,6 +34,10 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission())
|
||||
@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')}))
|
||||
def post(self, request: Request, workspace_id: str, knowledge_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Create(
|
||||
|
|
@ -87,6 +95,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Modify document",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
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
|
||||
|
|
@ -101,6 +115,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Delete document",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
|
||||
operate = DocumentSerializers.Operate(data={
|
||||
'document_id': document_id, 'knowledge_id': knowledge_id, 'workspace_id': workspace_id
|
||||
|
|
@ -171,6 +191,10 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Modify document hit processing methods in batches",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))))
|
||||
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}
|
||||
|
|
@ -190,6 +214,11 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Synchronize web site types",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
))
|
||||
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}
|
||||
|
|
@ -209,6 +238,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Refresh document vector library",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
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}
|
||||
|
|
@ -227,6 +262,11 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Cancel task",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
))
|
||||
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}
|
||||
|
|
@ -245,6 +285,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Cancel tasks in batches",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))
|
||||
)
|
||||
)
|
||||
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}
|
||||
|
|
@ -267,6 +313,12 @@ class DocumentView(APIView):
|
|||
PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission(),
|
||||
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
|
||||
)
|
||||
@log(menu='document', operate="Create documents in batches",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
{'name': f'[{",".join([document.get("name") for document in r.data])}]',
|
||||
'document_list': r.data})
|
||||
)
|
||||
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}
|
||||
|
|
@ -289,6 +341,11 @@ class DocumentView(APIView):
|
|||
PermissionConstants.KNOWLEDGE_DOCUMENT_SYNC.get_workspace_knowledge_permission(),
|
||||
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
|
||||
)
|
||||
@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')))
|
||||
)
|
||||
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}
|
||||
|
|
@ -311,6 +368,10 @@ class DocumentView(APIView):
|
|||
PermissionConstants.KNOWLEDGE_DOCUMENT_DELETE.get_workspace_knowledge_permission(),
|
||||
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
|
||||
)
|
||||
@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'))))
|
||||
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}
|
||||
|
|
@ -332,6 +393,12 @@ class DocumentView(APIView):
|
|||
PermissionConstants.KNOWLEDGE_DOCUMENT_VECTOR.get_workspace_knowledge_permission(),
|
||||
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
|
||||
)
|
||||
@log(menu='document', operate="Batch refresh document vector library",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Batch(
|
||||
|
|
@ -355,6 +422,12 @@ class DocumentView(APIView):
|
|||
PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission(),
|
||||
PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(),
|
||||
)
|
||||
@log(menu='document', operate="Batch generate related documents",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object_batch(r.data.get('document_id_list'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str):
|
||||
return result.success(DocumentSerializers.BatchGenerateRelated(
|
||||
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
|
||||
|
|
@ -396,6 +469,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Export document",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
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
|
||||
|
|
@ -412,6 +491,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EXPORT.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Export Zip document",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
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
|
||||
|
|
@ -445,6 +530,12 @@ class DocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Migrate documents in batches",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object_batch(r.data)
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id, knowledge_id: str, target_knowledge_id: str):
|
||||
return result.success(DocumentSerializers.Migrate(
|
||||
data={
|
||||
|
|
@ -469,6 +560,11 @@ class WebDocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Create Web site documents",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
{'name': f'[{",".join([url for url in r.data.get("source_url_list", [])])}]',
|
||||
'document_list': [{'name': url} for url in r.data.get("source_url_list", [])]}))
|
||||
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
|
||||
|
|
@ -489,6 +585,11 @@ class QaDocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Import QA and create documentation",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]',
|
||||
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}))
|
||||
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
|
||||
|
|
@ -509,6 +610,11 @@ class TableDocumentView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate="Import tables and create documents",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]',
|
||||
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}))
|
||||
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}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from rest_framework.views import APIView
|
|||
from rest_framework.views import Request
|
||||
|
||||
from common.auth import TokenAuth
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from knowledge.api.file import FileUploadAPI, FileGetAPI
|
||||
from knowledge.serializers.file import FileSerializer
|
||||
|
|
@ -25,6 +26,7 @@ class FileView(APIView):
|
|||
responses=FileUploadAPI.get_response(),
|
||||
tags=[_('File')] # type: ignore
|
||||
)
|
||||
@log(menu='file', operate='Upload file')
|
||||
def post(self, request: Request):
|
||||
return result.success(FileSerializer(data={'file': request.FILES.get('file')}).upload())
|
||||
|
||||
|
|
@ -50,5 +52,6 @@ class FileView(APIView):
|
|||
responses=FileGetAPI.get_response(),
|
||||
tags=[_('File')] # type: ignore
|
||||
)
|
||||
@log(menu='file', operate='Delete file')
|
||||
def delete(self, request: Request, file_id: str):
|
||||
return result.success(FileSerializer.Operate(data={'id': file_id}).delete())
|
||||
|
|
|
|||
|
|
@ -6,10 +6,12 @@ from rest_framework.views import APIView
|
|||
from common.auth import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from knowledge.api.knowledge import KnowledgeBaseCreateAPI, KnowledgeWebCreateAPI, KnowledgeTreeReadAPI, \
|
||||
KnowledgeEditAPI, KnowledgeReadAPI, KnowledgePageAPI, SyncWebAPI, GenerateRelatedAPI, HitTestAPI, EmbeddingAPI, \
|
||||
GetModelAPI, KnowledgeExportAPI
|
||||
from knowledge.serializers.common import get_knowledge_operation_object
|
||||
from knowledge.serializers.knowledge import KnowledgeSerializer
|
||||
from models_provider.serializers.model_serializer import ModelSerializer
|
||||
|
||||
|
|
@ -52,6 +54,8 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='Knowledge Base', operate="Modify knowledge base information",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')))
|
||||
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}
|
||||
|
|
@ -68,6 +72,8 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DELETE.get_workspace_knowledge_permission())
|
||||
@log(menu='Knowledge Base', operate="Delete knowledge base",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')))
|
||||
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}
|
||||
|
|
@ -126,6 +132,8 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_SYNC.get_workspace_knowledge_permission())
|
||||
@log(menu='Knowledge Base', operate="Synchronize the knowledge base of the website",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')))
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str):
|
||||
return result.success(KnowledgeSerializer.SyncWeb(
|
||||
data={
|
||||
|
|
@ -177,6 +185,8 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_VECTOR.get_workspace_knowledge_permission())
|
||||
@log(menu='Knowledge Base', operate='Re-vectorize',
|
||||
get_operation_object=lambda r,k: get_knowledge_operation_object(k.get('knowledge_id')))
|
||||
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}
|
||||
|
|
@ -193,6 +203,8 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission())
|
||||
@log(menu='Knowledge Base', operate="Export knowledge base",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')))
|
||||
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
|
||||
|
|
@ -209,6 +221,8 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission())
|
||||
@log(menu='Knowledge Base', operate="Export knowledge base containing images",
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')))
|
||||
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
|
||||
|
|
@ -228,6 +242,9 @@ class KnowledgeView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_GENERATE.get_workspace_knowledge_permission())
|
||||
@log(menu='document', operate='Generate related documents',
|
||||
get_operation_object=lambda r,k: get_knowledge_operation_object(k.get('knowledge_id'))
|
||||
)
|
||||
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}
|
||||
|
|
@ -290,6 +307,8 @@ class KnowledgeBaseView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission())
|
||||
@log(menu='knowledge Base', operate='Create base knowledge',
|
||||
get_operation_object=lambda r,k: {'name': r.data.get('name'), 'desc': r.data.get('desc')})
|
||||
def post(self, request: Request, workspace_id: str):
|
||||
return result.success(KnowledgeSerializer.Create(
|
||||
data={'user_id': request.user.id, 'workspace_id': workspace_id}
|
||||
|
|
@ -310,6 +329,13 @@ class KnowledgeWebView(APIView):
|
|||
tags=[_('Knowledge Base')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission())
|
||||
@log(menu='Knowledge Base', operate="Create a web site knowledge base",
|
||||
get_operation_object=lambda r,k: {'name': r.data.get('name'),'desc': r.data.get('desc'),
|
||||
'first_list': r.FILES.getlist('file'),
|
||||
'meta': {'source_url': r.data.get('source_url'),
|
||||
'selector': r.data.get('selector'),
|
||||
'embedding_mode_id': r.data.get('embedding_mode_id')}}
|
||||
)
|
||||
def post(self, request: Request, workspace_id: str):
|
||||
return result.success(KnowledgeSerializer.Create(
|
||||
data={'user_id': request.user.id, 'workspace_id': workspace_id}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,15 @@ from rest_framework.views import Request
|
|||
from common.auth import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from common.utils.common import query_params_to_single_dict
|
||||
from knowledge.api.paragraph import ParagraphReadAPI, ParagraphCreateAPI, ParagraphBatchDeleteAPI, ParagraphEditAPI, \
|
||||
ParagraphGetAPI, ProblemCreateAPI, UnAssociationAPI, AssociationAPI, ParagraphPageAPI, \
|
||||
ParagraphBatchGenerateRelatedAPI, ParagraphMigrateAPI
|
||||
from knowledge.serializers.common import get_knowledge_operation_object
|
||||
from knowledge.serializers.paragraph import ParagraphSerializers
|
||||
from knowledge.views import get_knowledge_document_operation_object, get_document_operation_object
|
||||
|
||||
|
||||
class ParagraphView(APIView):
|
||||
|
|
@ -47,6 +50,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_CREATE.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Create Paragraph',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
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}
|
||||
|
|
@ -83,6 +92,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_MIGRATE.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Migrate paragraphs in batches',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str,
|
||||
target_knowledge_id: str, target_document_id):
|
||||
return result.success(
|
||||
|
|
@ -109,6 +124,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_GENERATE.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Batch generate related',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
|
||||
return result.success(ParagraphSerializers.Batch(
|
||||
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'document_id': document_id}
|
||||
|
|
@ -128,6 +149,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Modify paragraph data',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
|
||||
o = ParagraphSerializers.Operate(
|
||||
data={
|
||||
|
|
@ -171,6 +198,12 @@ class ParagraphView(APIView):
|
|||
responses=ParagraphGetAPI.get_response(),
|
||||
tags=[_('Knowledge Base/Documentation/Paragraph')]) # type: ignore
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Delete paragraph',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
|
||||
o = ParagraphSerializers.Operate(
|
||||
data={
|
||||
|
|
@ -197,6 +230,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Add associated questions',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str):
|
||||
return result.success(ParagraphSerializers.Problem(
|
||||
data={
|
||||
|
|
@ -241,6 +280,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Disassociation issue',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
|
||||
return result.success(ParagraphSerializers.Association(
|
||||
data={
|
||||
|
|
@ -266,6 +311,12 @@ class ParagraphView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='Paragraph', operate='Related questions',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_document_operation_object(
|
||||
get_knowledge_operation_object(keywords.get('knowledge_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str):
|
||||
return result.success(ParagraphSerializers.Association(
|
||||
data={
|
||||
|
|
|
|||
|
|
@ -6,10 +6,12 @@ from rest_framework.views import Request
|
|||
from common.auth import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from common.utils.common import query_params_to_single_dict
|
||||
from knowledge.api.problem import ProblemReadAPI, ProblemBatchCreateAPI, BatchAssociationAPI, BatchDeleteAPI, \
|
||||
ProblemPageAPI, ProblemDeleteAPI, ProblemEditAPI, ProblemParagraphAPI
|
||||
from knowledge.serializers.common import get_knowledge_operation_object
|
||||
from knowledge.serializers.problem import ProblemSerializers
|
||||
|
||||
|
||||
|
|
@ -48,6 +50,9 @@ class ProblemView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='problem', operate='Create question',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('dataset_id'))
|
||||
)
|
||||
def post(self, request: Request, workspace_id: str, knowledge_id: str):
|
||||
return result.success(ProblemSerializers.Create(
|
||||
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
|
||||
|
|
@ -88,6 +93,8 @@ class ProblemView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='problem', operate='Batch associated paragraphs',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('dataset_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}
|
||||
|
|
@ -107,6 +114,8 @@ class ProblemView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='problem', operate='Batch deletion issues',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('dataset_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}
|
||||
|
|
@ -125,6 +134,8 @@ class ProblemView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_DELETE.get_workspace_knowledge_permission())
|
||||
@log(menu='problem', operate='Delete question',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('dataset_id')))
|
||||
def delete(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
|
||||
return result.success(ProblemSerializers.Operate(
|
||||
data={
|
||||
|
|
@ -146,6 +157,8 @@ class ProblemView(APIView):
|
|||
tags=[_('Knowledge Base/Documentation/Paragraph/Question')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.KNOWLEDGE_PROBLEM_EDIT.get_workspace_knowledge_permission())
|
||||
@log(menu='problem', operate='Modify question',
|
||||
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('dataset_id')))
|
||||
def put(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str):
|
||||
return result.success(ProblemSerializers.Operate(
|
||||
data={
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
@date:2025/4/14 19:25
|
||||
@desc:
|
||||
"""
|
||||
from django.db.models import QuerySet
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.views import APIView
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
|
@ -14,11 +15,42 @@ from rest_framework.request import Request
|
|||
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 common.result import result
|
||||
from common.utils.common import query_params_to_single_dict
|
||||
from models_provider.api.model import ModelCreateAPI, GetModelApi, ModelEditApi, ModelListResponse, DefaultModelResponse
|
||||
from models_provider.api.provide import ProvideApi
|
||||
from models_provider.models import Model
|
||||
from models_provider.serializers.model_serializer import ModelSerializer
|
||||
from system_manage.views import encryption_str
|
||||
|
||||
|
||||
def encryption_credential(credential):
|
||||
if isinstance(credential, dict):
|
||||
return {key: encryption_str(credential.get(key)) for key in credential}
|
||||
return credential
|
||||
|
||||
|
||||
|
||||
def get_edit_model_details(request):
|
||||
path = request.path
|
||||
body = request.data
|
||||
query = request.query_params
|
||||
credential = body.get('credential', {})
|
||||
credential_encryption_ed = encryption_credential(credential)
|
||||
return {
|
||||
'path': path,
|
||||
'body': {**body, 'credential':credential_encryption_ed},
|
||||
'query': query
|
||||
}
|
||||
|
||||
def get_model_operation_object(model_id):
|
||||
model_model = QuerySet(model=Model).filter(id=model_id).first()
|
||||
if model_model is not None:
|
||||
return {
|
||||
"name":model_model.name
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
class Model(APIView):
|
||||
|
|
@ -33,6 +65,10 @@ class Model(APIView):
|
|||
request=ModelCreateAPI.get_request(),
|
||||
responses=ModelCreateAPI.get_response())
|
||||
@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
|
||||
)
|
||||
def post(self, request: Request, workspace_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Create(data={**request.data, 'user_id': request.user.id}).insert(workspace_id,
|
||||
|
|
@ -76,6 +112,10 @@ class Model(APIView):
|
|||
responses=ModelEditApi.get_response(),
|
||||
tags=[_('Model')]) # type: ignore
|
||||
@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
|
||||
)
|
||||
def put(self, request: Request, workspace_id, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).edit(request.data,
|
||||
|
|
@ -89,6 +129,8 @@ class Model(APIView):
|
|||
responses=DefaultModelResponse.get_response(),
|
||||
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')))
|
||||
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())
|
||||
|
|
@ -129,6 +171,8 @@ class Model(APIView):
|
|||
responses=ProvideApi.ModelParamsForm.get_response(),
|
||||
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')))
|
||||
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))
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ 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
|
||||
|
|
@ -24,6 +25,7 @@ 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:
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
@desc:
|
||||
"""
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from networkx.algorithms.traversal import dfs_successors
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
|
||||
|
|
@ -16,11 +17,31 @@ from common.constants.permission_constants import PermissionConstants
|
|||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from common.utils.common import encryption
|
||||
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
|
||||
query = request.query_params
|
||||
email_host_password = body.get('email_host_password', '')
|
||||
return {
|
||||
'path': path,
|
||||
'body': {**body, 'email_host_password': encryption_str(email_host_password)},
|
||||
'query': query
|
||||
}
|
||||
|
||||
|
||||
class SystemSetting(APIView):
|
||||
class Email(APIView):
|
||||
|
|
@ -33,6 +54,8 @@ class SystemSetting(APIView):
|
|||
request=EmailSettingAPI.get_request(),
|
||||
responses=EmailSettingAPI.get_response(),
|
||||
tags=[_('Email Settings')]) # type: ignore
|
||||
@log(menu='Email settings', operate='Create or update email settings',
|
||||
get_details=get_email_details)
|
||||
@has_permissions(PermissionConstants.EMAIL_SETTING_EDIT)
|
||||
def put(self, request: Request):
|
||||
return result.success(
|
||||
|
|
@ -48,6 +71,9 @@ 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
|
||||
)
|
||||
def post(self, request: Request):
|
||||
return result.success(
|
||||
EmailSettingSerializer.Create(
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
@date:2025/4/28 16:38
|
||||
@desc:
|
||||
"""
|
||||
|
||||
from django.db.models import QuerySet
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.request import Request
|
||||
|
|
@ -16,11 +16,21 @@ 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 common.result import DefaultResultSerializer
|
||||
from system_manage.api.user_resource_permission import UserResourcePermissionAPI, EditUserResourcePermissionAPI
|
||||
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
||||
from users.models import User
|
||||
|
||||
|
||||
def get_user_operation_object(user_id):
|
||||
user_model = QuerySet(model=User).filter(id=user_id).first()
|
||||
if user_model is not None:
|
||||
return {
|
||||
"name": user_model.username
|
||||
}
|
||||
return {}
|
||||
|
||||
class WorkSpaceUserResourcePermissionView(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
|
|
@ -47,6 +57,9 @@ class WorkSpaceUserResourcePermissionView(APIView):
|
|||
responses=DefaultResultSerializer(),
|
||||
tags=[_('Resources authorization')] # type: ignore
|
||||
)
|
||||
@log(menu='System', operate='Modify the resource authorization list',
|
||||
get_operation_object=lambda r, k: get_user_operation_object(k.get('user_id'))
|
||||
)
|
||||
def put(self, request: Request, workspace_id: str, user_id: str):
|
||||
return result.success(UserResourcePermissionSerializer(
|
||||
data={'workspace_id': workspace_id, 'user_id': user_id}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
from django.db.models import QuerySet
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.parsers import MultiPartParser
|
||||
|
|
@ -7,13 +8,22 @@ from rest_framework.views import APIView
|
|||
from common.auth import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from tools.api.tool import ToolCreateAPI, ToolEditAPI, ToolReadAPI, ToolDeleteAPI, ToolTreeReadAPI, ToolDebugApi, \
|
||||
ToolExportAPI, ToolImportAPI, ToolPageAPI, PylintAPI, EditIconAPI
|
||||
from tools.models import ToolScope
|
||||
from tools.models import ToolScope, Tool
|
||||
from tools.serializers.tool import ToolSerializer, ToolTreeSerializer
|
||||
|
||||
|
||||
def get_tool_operation_object(tool_id):
|
||||
tool_model = QuerySet(model=Tool).filter(id=tool_id).first()
|
||||
if tool_model is not None:
|
||||
return {
|
||||
"name": tool_model.name
|
||||
}
|
||||
return {}
|
||||
|
||||
class ToolView(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
|
|
@ -28,6 +38,8 @@ class ToolView(APIView):
|
|||
tags=[_('Tool')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_CREATE.get_workspace_permission())
|
||||
@log(menu="Tool", operate="Create tool",
|
||||
get_operation_object=lambda r,k: r.data.get('name'))
|
||||
def post(self, request: Request, workspace_id: str):
|
||||
return result.success(ToolSerializer.Create(
|
||||
data={'user_id': request.user.id, 'workspace_id': workspace_id}
|
||||
|
|
@ -80,6 +92,8 @@ class ToolView(APIView):
|
|||
tags=[_('Tool')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_EDIT.get_workspace_permission())
|
||||
@log(menu='Tool', operate='Update tool',
|
||||
get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')))
|
||||
def put(self, request: Request, workspace_id: str, tool_id: str):
|
||||
return result.success(ToolSerializer.Operate(
|
||||
data={'id': tool_id, 'workspace_id': workspace_id}
|
||||
|
|
@ -95,6 +109,7 @@ class ToolView(APIView):
|
|||
tags=[_('Tool')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_READ.get_workspace_permission())
|
||||
@log(menu='Tool', operate='Get tool')
|
||||
def get(self, request: Request, workspace_id: str, tool_id: str):
|
||||
return result.success(ToolSerializer.Operate(
|
||||
data={'id': tool_id, 'workspace_id': workspace_id}
|
||||
|
|
@ -110,6 +125,8 @@ class ToolView(APIView):
|
|||
tags=[_('Tool')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_DELETE.get_workspace_permission())
|
||||
@log(menu='Tool', operate="Delete tool",
|
||||
get_operation_object=lambda r,k: get_tool_operation_object(k.get('tool_id')))
|
||||
def delete(self, request: Request, workspace_id: str, tool_id: str):
|
||||
return result.success(ToolSerializer.Operate(
|
||||
data={'id': tool_id, 'workspace_id': workspace_id}
|
||||
|
|
@ -128,6 +145,7 @@ class ToolView(APIView):
|
|||
tags=[_('Tool')] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_READ.get_workspace_permission())
|
||||
@log(menu='Tool', operate='Get tool list')
|
||||
def get(self, request: Request, workspace_id: str, current_page: int, page_size: int):
|
||||
return result.success(ToolTreeSerializer.Query(
|
||||
data={
|
||||
|
|
@ -153,6 +171,7 @@ class ToolView(APIView):
|
|||
tags=[_("Tool")] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_IMPORT.get_workspace_permission())
|
||||
@log(menu='Tool', operate='Import tool')
|
||||
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}
|
||||
|
|
@ -171,6 +190,8 @@ class ToolView(APIView):
|
|||
tags=[_("Tool")] # type: ignore
|
||||
)
|
||||
@has_permissions(PermissionConstants.TOOL_EXPORT.get_workspace_permission())
|
||||
@log(menu='Tool', operate="Export function",
|
||||
get_operation_object=lambda r,k: get_tool_operation_object(k.get('id')))
|
||||
def get(self, request: Request, tool_id: str, workspace_id: str):
|
||||
return ToolSerializer.Operate(
|
||||
data={'id': tool_id, 'workspace_id': workspace_id}
|
||||
|
|
|
|||
|
|
@ -12,9 +12,20 @@ from rest_framework.request import Request
|
|||
from rest_framework.views import APIView
|
||||
|
||||
from common import result
|
||||
from common.log.log import log
|
||||
from common.utils.common import encryption
|
||||
from users.api.login import LoginAPI, CaptchaAPI
|
||||
from users.serializers.login import LoginSerializer, CaptchaSerializer
|
||||
|
||||
def _get_details(request):
|
||||
path = request.path
|
||||
body = request.data
|
||||
query = request.query_params
|
||||
return {
|
||||
'path':path,
|
||||
'body':{**body, 'password': encryption(body.get('password',''))},
|
||||
'query': query
|
||||
}
|
||||
|
||||
class LoginView(APIView):
|
||||
@extend_schema(methods=['POST'],
|
||||
|
|
@ -24,6 +35,9 @@ class LoginView(APIView):
|
|||
tags=[_("User Management")], # type: ignore
|
||||
request=LoginAPI.get_request(),
|
||||
responses=LoginAPI.get_response())
|
||||
@log(menu='User management', operate='Log in', get_user=lambda r: {'username': r.data.get('username', None)},
|
||||
get_details=_get_details,
|
||||
get_operation_object=lambda r,k: {'name': r.data.get('username')})
|
||||
def post(self, request: Request):
|
||||
return result.success(LoginSerializer().login(request.data))
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
@date:2025/4/14 19:25
|
||||
@desc:
|
||||
"""
|
||||
from django.db.models import QuerySet
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.request import Request
|
||||
|
|
@ -14,16 +15,40 @@ from rest_framework.views import APIView
|
|||
from common.auth.authenticate import TokenAuth
|
||||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants, Permission, Group, Operate
|
||||
from common.log.log import log
|
||||
from common.result import result
|
||||
from maxkb.const import CONFIG
|
||||
from models_provider.api.model import DefaultModelResponse
|
||||
from tools.serializers.tool import encryption
|
||||
from users.api.user import UserProfileAPI, TestWorkspacePermissionUserApi, DeleteUserApi, EditUserApi, \
|
||||
ChangeUserPasswordApi, UserPageApi, UserListApi, UserPasswordResponse, WorkspaceUserAPI
|
||||
from users.models import User
|
||||
from users.serializers.user import UserProfileSerializer, UserManageSerializer
|
||||
|
||||
default_password = CONFIG.get('default_password', 'MaxKB@123..')
|
||||
|
||||
|
||||
def get_user_operation_object(user_id):
|
||||
user_model = QuerySet(model=User).filter(id=user_id).first()
|
||||
if user_model is not None:
|
||||
return {
|
||||
"name":user_model.name
|
||||
}
|
||||
return {}
|
||||
|
||||
def get_re_password_details(request):
|
||||
path = request.path
|
||||
body = request.data
|
||||
query = request.query_params
|
||||
return {
|
||||
"path": path,
|
||||
"body": {**body, 'password': encryption(body.get('password', '')),
|
||||
're_password': encryption(body.get('re_password',''))},
|
||||
"query": query
|
||||
}
|
||||
|
||||
|
||||
|
||||
class UserProfileView(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
|
|
@ -32,6 +57,7 @@ class UserProfileView(APIView):
|
|||
description=_("Get current user information"),
|
||||
operation_id=_("Get current user information"), # type: ignore
|
||||
tags=[_("User Management")], # type: ignore
|
||||
|
||||
responses=UserProfileAPI.get_response())
|
||||
def get(self, request: Request):
|
||||
return result.success(UserProfileSerializer().profile(request.user, request.auth))
|
||||
|
|
@ -118,6 +144,8 @@ class UserManage(APIView):
|
|||
parameters=DeleteUserApi.get_parameters(),
|
||||
responses=DefaultModelResponse.get_response())
|
||||
@has_permissions(PermissionConstants.USER_DELETE)
|
||||
@log(menu='User management', operate='Delete user',
|
||||
get_operation_object= lambda r,k: get_user_operation_object(k.get('user_id')))
|
||||
def delete(self, request: Request, user_id):
|
||||
return result.success(UserManageSerializer.Operate(data={'id': user_id}).delete(with_valid=True))
|
||||
|
||||
|
|
@ -156,6 +184,8 @@ class UserManage(APIView):
|
|||
request=DeleteUserApi.get_request(),
|
||||
responses=DefaultModelResponse.get_response())
|
||||
@has_permissions(PermissionConstants.USER_DELETE)
|
||||
@log(menu='User management', operate='Batch delete user',
|
||||
get_operation_object= lambda r,k: get_user_operation_object(k.get('user_id')))
|
||||
def post(self, request: Request):
|
||||
return result.success(UserManageSerializer.BatchDelete(data=request.data).batch_delete(with_valid=True))
|
||||
|
||||
|
|
@ -170,6 +200,9 @@ class UserManage(APIView):
|
|||
parameters=DeleteUserApi.get_parameters(),
|
||||
request=ChangeUserPasswordApi.get_request(),
|
||||
responses=DefaultModelResponse.get_response())
|
||||
@log(menu='User management', operate='Change password',
|
||||
get_operation_object= lambda r,k: get_user_operation_object(k.get('user_id')),
|
||||
get_details=get_re_password_details)
|
||||
def put(self, request: Request, user_id):
|
||||
return result.success(
|
||||
UserManageSerializer.Operate(data={'id': user_id}).re_password(request.data, with_valid=True))
|
||||
|
|
|
|||
Loading…
Reference in New Issue