Skip to content

Commit 3447da5

Browse files
authored
fix: application related knowledge (#3406)
1 parent ac545f9 commit 3447da5

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

apps/application/serializers/application.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import uuid_utils.compat as uuid
1717
from django.core import validators
1818
from django.db import models, transaction
19-
from django.db.models import QuerySet
19+
from django.db.models import QuerySet, Q
2020
from django.http import HttpResponse
2121
from django.utils.translation import gettext_lazy as _
2222
from rest_framework import serializers, status
@@ -32,7 +32,8 @@
3232
from common.exception.app_exception import AppApiException
3333
from common.field.common import UploadedFileField
3434
from common.utils.common import get_file_content, valid_license, restricted_loads
35-
from knowledge.models import Knowledge
35+
from knowledge.models import Knowledge, KnowledgeScope
36+
from knowledge.serializers.knowledge import KnowledgeSerializer, KnowledgeModelSerializer
3637
from maxkb.conf import PROJECT_DIR
3738
from models_provider.models import Model
3839
from system_manage.models import WorkspaceUserResourcePermission
@@ -703,7 +704,7 @@ def edit(self, instance: Dict, with_valid=True):
703704
if 'knowledge_id_list' in instance:
704705
knowledge_id_list = instance.get('knowledge_id_list')
705706
# 当前用户可修改关联的知识库列表
706-
application_knowledge_id_list = [str(knowledge.id) for knowledge in
707+
application_knowledge_id_list = [str(knowledge.get('id')) for knowledge in
707708
self.list_knowledge(with_valid=False)]
708709
for knowledge_id in knowledge_id_list:
709710
if not application_knowledge_id_list.__contains__(knowledge_id):
@@ -723,7 +724,7 @@ def one(self, with_valid=True):
723724
mapping_knowledge_id_list = [akm.knowledge_id for akm in
724725
QuerySet(ApplicationKnowledgeMapping).filter(application_id=application_id)]
725726
knowledge_id_list = [d.id for d in
726-
list(filter(lambda row: mapping_knowledge_id_list.__contains__(row.id),
727+
list(filter(lambda row: mapping_knowledge_id_list.__contains__(row.get('id')),
727728
knowledge_list))]
728729
return {**ApplicationSerializerModel(application).data,
729730
'knowledge_id_list': knowledge_id_list}
@@ -732,8 +733,28 @@ def list_knowledge(self, with_valid=True):
732733
if with_valid:
733734
self.is_valid(raise_exception=True)
734735
workspace_id = self.data.get("workspace_id")
735-
knowledge_list = QuerySet(Knowledge).filter(workspace_id=workspace_id)
736-
return knowledge_list
736+
user_id = self.data.get('user_id')
737+
knowledge_workspace_authorization_model = DatabaseModelManage.get_model('knowledge_workspace_authorization')
738+
share_knowledge_list = []
739+
if knowledge_workspace_authorization_model is not None:
740+
white_list_condition = Q(authentication_type='WHITE_LIST') & Q(
741+
workspace_id_list__contains=[workspace_id])
742+
default_condition = ~Q(authentication_type='WHITE_LIST') & ~Q(
743+
workspace_id_list__contains=[workspace_id])
744+
# 组合查询
745+
query = white_list_condition | default_condition
746+
inner = QuerySet(knowledge_workspace_authorization_model).filter(query)
747+
share_knowledge_list = [KnowledgeModelSerializer(k).data for k in QuerySet(Knowledge).filter(id__in=inner)]
748+
workspace_knowledge_list = [k for k in KnowledgeSerializer.Query(
749+
data={
750+
'folder_id': 'default',
751+
'workspace_id': workspace_id,
752+
'scope': KnowledgeScope.WORKSPACE,
753+
'user_id': user_id
754+
}
755+
).list() if k.get('resource_type') == 'knowledge']
756+
757+
return [*workspace_knowledge_list, *share_knowledge_list]
737758

738759
@staticmethod
739760
def save_application_knowledge_mapping(application_knowledge_id_list, knowledge_id_list, application_id):

0 commit comments

Comments
 (0)