|
20 | 20 | from application.models import ChatRecord, ApplicationAccessToken, Application |
21 | 21 | from application.serializers.application_chat import ChatCountSerializer |
22 | 22 | from application.serializers.common import ChatInfo |
| 23 | +from common.auth.authentication import get_is_permissions |
| 24 | +from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants |
23 | 25 | from common.db.search import page_search |
24 | | -from common.exception.app_exception import AppApiException |
| 26 | +from common.exception.app_exception import AppApiException, AppUnauthorizedFailed |
25 | 27 | from common.utils.common import post |
26 | 28 | from knowledge.models import Paragraph, Document, Problem, ProblemParagraphMapping, Knowledge |
27 | 29 | from knowledge.serializers.common import get_embedding_model_id_by_knowledge_id, update_document_char_length |
@@ -254,8 +256,27 @@ def post_embedding_paragraph(paragraph_ids, knowledge_id): |
254 | 256 |
|
255 | 257 | @post(post_function=post_embedding_paragraph) |
256 | 258 | @transaction.atomic |
257 | | - def post_improve(self, instance: Dict): |
258 | | - ApplicationChatRecordAddKnowledgeSerializer(data=instance).is_valid(raise_exception=True) |
| 259 | + def post_improve(self, instance: Dict, request=None, scope='WORKSPACE', with_valid=True): |
| 260 | + if with_valid: |
| 261 | + ApplicationChatRecordAddKnowledgeSerializer(data=instance).is_valid(raise_exception=True) |
| 262 | + self.is_valid(raise_exception=True) |
| 263 | + if scope == 'WORKSPACE': |
| 264 | + is_permission = get_is_permissions(request=request, workspace_id=self.data.get('workspace_id'), |
| 265 | + knowledge_id=self.data.get("knowledge_id"))( |
| 266 | + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), |
| 267 | + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_permission_workspace_manage_role(), |
| 268 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
| 269 | + ViewPermission([RoleConstants.USER.get_workspace_role()], |
| 270 | + [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], |
| 271 | + CompareConstants.AND), |
| 272 | + ) |
| 273 | + else: |
| 274 | + is_permission = get_is_permissions(request=request, workspace_id=self.data.get('workspace_id'), |
| 275 | + knowledge_id=self.data.get("knowledge_id"))( |
| 276 | + PermissionConstants.RESOURCE_KNOWLEDGE_DOCUMENT_EDIT, RoleConstants.ADMIN |
| 277 | + ) |
| 278 | + if not is_permission: |
| 279 | + raise AppUnauthorizedFailed(403, gettext('No permission to access')) |
259 | 280 |
|
260 | 281 | chat_ids = instance['chat_ids'] |
261 | 282 | document_id = instance['document_id'] |
@@ -372,9 +393,26 @@ def post_embedding_paragraph(chat_record, paragraph_id, knowledge_id): |
372 | 393 |
|
373 | 394 | @post(post_function=post_embedding_paragraph) |
374 | 395 | @transaction.atomic |
375 | | - def improve(self, instance: Dict, with_valid=True): |
| 396 | + def improve(self, instance: Dict, request=None, scope='WORKSPACE', with_valid=True): |
376 | 397 | if with_valid: |
377 | 398 | self.is_valid(raise_exception=True) |
| 399 | + if scope == 'WORKSPACE': |
| 400 | + is_permission = get_is_permissions(request, workspace_id=self.data.get('workspace_id'), |
| 401 | + knowledge_id=self.data.get("knowledge_id"))( |
| 402 | + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), |
| 403 | + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_permission_workspace_manage_role(), |
| 404 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
| 405 | + ViewPermission([RoleConstants.USER.get_workspace_role()], |
| 406 | + [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], |
| 407 | + CompareConstants.AND), |
| 408 | + ) |
| 409 | + else: |
| 410 | + is_permission = get_is_permissions(request, workspace_id=self.data.get('workspace_id'), |
| 411 | + knowledge_id=self.data.get("knowledge_id"))( |
| 412 | + PermissionConstants.RESOURCE_KNOWLEDGE_DOCUMENT_EDIT, RoleConstants.ADMIN |
| 413 | + ) |
| 414 | + if not is_permission: |
| 415 | + raise AppUnauthorizedFailed(403, gettext('No permission to access')) |
378 | 416 | ApplicationChatRecordImproveInstanceSerializer(data=instance).is_valid(raise_exception=True) |
379 | 417 | chat_record_id = self.data.get('chat_record_id') |
380 | 418 | chat_id = self.data.get('chat_id') |
@@ -427,9 +465,28 @@ class Operate(serializers.Serializer): |
427 | 465 |
|
428 | 466 | workspace_id = serializers.CharField(required=True, label=_("Workspace ID")) |
429 | 467 |
|
430 | | - def delete(self, with_valid=True): |
| 468 | + def delete(self, request=None, scope='WORKSPACE', with_valid=True): |
431 | 469 | if with_valid: |
432 | 470 | self.is_valid(raise_exception=True) |
| 471 | + if scope == 'WORKSPACE': |
| 472 | + is_permission = get_is_permissions(request=request, workspace_id=self.data.get('workspace_id'), |
| 473 | + knowledge_id=self.data.get("knowledge_id"))( |
| 474 | + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_knowledge_permission(), |
| 475 | + PermissionConstants.KNOWLEDGE_DOCUMENT_EDIT.get_workspace_permission_workspace_manage_role(), |
| 476 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
| 477 | + ViewPermission([RoleConstants.USER.get_workspace_role()], |
| 478 | + [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], |
| 479 | + CompareConstants.AND), |
| 480 | + ) |
| 481 | + else: |
| 482 | + is_permission = get_is_permissions(request=request, workspace_id=self.data.get('workspace_id'), |
| 483 | + knowledge_id=self.data.get("knowledge_id"))( |
| 484 | + PermissionConstants.RESOURCE_KNOWLEDGE_DOCUMENT_EDIT, RoleConstants.ADMIN |
| 485 | + ) |
| 486 | + |
| 487 | + if not is_permission: |
| 488 | + raise AppUnauthorizedFailed(403, gettext('No permission to access')) |
| 489 | + |
433 | 490 | workspace_id = self.data.get('workspace_id') |
434 | 491 | chat_record_id = self.data.get('chat_record_id') |
435 | 492 | chat_id = self.data.get('chat_id') |
|
0 commit comments