Skip to content

Commit 8919d00

Browse files
committed
fix: Chat log add to knowledge permission
--bug=1060944 --user=张展玮 【权限】用户只有知识库的查看权限,但可以将对话日志中的信息添加到知识库作为分段,并可删除 https://www.tapd.cn/62980211/s/1763639
1 parent 82701e7 commit 8919d00

File tree

2 files changed

+65
-8
lines changed

2 files changed

+65
-8
lines changed

apps/application/serializers/application_chat_record.py

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
from application.models import ChatRecord, ApplicationAccessToken, Application
2121
from application.serializers.application_chat import ChatCountSerializer
2222
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
2325
from common.db.search import page_search
24-
from common.exception.app_exception import AppApiException
26+
from common.exception.app_exception import AppApiException, AppUnauthorizedFailed
2527
from common.utils.common import post
2628
from knowledge.models import Paragraph, Document, Problem, ProblemParagraphMapping, Knowledge
2729
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):
254256

255257
@post(post_function=post_embedding_paragraph)
256258
@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'))
259280

260281
chat_ids = instance['chat_ids']
261282
document_id = instance['document_id']
@@ -372,9 +393,26 @@ def post_embedding_paragraph(chat_record, paragraph_id, knowledge_id):
372393

373394
@post(post_function=post_embedding_paragraph)
374395
@transaction.atomic
375-
def improve(self, instance: Dict, with_valid=True):
396+
def improve(self, instance: Dict, request=None, scope='WORKSPACE', with_valid=True):
376397
if with_valid:
377398
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'))
378416
ApplicationChatRecordImproveInstanceSerializer(data=instance).is_valid(raise_exception=True)
379417
chat_record_id = self.data.get('chat_record_id')
380418
chat_id = self.data.get('chat_id')
@@ -427,9 +465,28 @@ class Operate(serializers.Serializer):
427465

428466
workspace_id = serializers.CharField(required=True, label=_("Workspace ID"))
429467

430-
def delete(self, with_valid=True):
468+
def delete(self, request=None, scope='WORKSPACE', with_valid=True):
431469
if with_valid:
432470
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+
433490
workspace_id = self.data.get('workspace_id')
434491
chat_record_id = self.data.get('chat_record_id')
435492
chat_id = self.data.get('chat_id')

apps/application/views/application_chat_record.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class ApplicationChatRecordAddKnowledge(APIView):
129129
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
130130
def post(self, request: Request, workspace_id: str, application_id: str):
131131
return result.success(ApplicationChatRecordAddKnowledgeSerializer().post_improve(
132-
{'workspace_id': workspace_id, 'application_id': application_id, **request.data}))
132+
{'workspace_id': workspace_id, 'application_id': application_id, **request.data}, request=request))
133133

134134

135135
class ApplicationChatRecordImprove(APIView):
@@ -186,7 +186,7 @@ def put(self, request: Request,
186186
return result.success(ApplicationChatRecordImproveSerializer(
187187
data={'workspace_id': workspace_id, 'application_id': application_id, 'chat_id': chat_id,
188188
'chat_record_id': chat_record_id,
189-
'knowledge_id': knowledge_id, 'document_id': document_id}).improve(request.data))
189+
'knowledge_id': knowledge_id, 'document_id': document_id}).improve(request.data, request=request))
190190

191191
class Operate(APIView):
192192
authentication_classes = [TokenAuth]
@@ -214,4 +214,4 @@ def delete(self, request: Request, workspace_id: str, application_id: str, chat_
214214
data={'chat_id': chat_id, 'chat_record_id': chat_record_id, 'workspace_id': workspace_id,
215215
'application_id': application_id,
216216
'knowledge_id': knowledge_id, 'document_id': document_id,
217-
'paragraph_id': paragraph_id}).delete())
217+
'paragraph_id': paragraph_id}).delete(request=request))

0 commit comments

Comments
 (0)