From a34c089b7306de7fd975cc0049b90ae210e11091 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 2 Jul 2025 14:15:28 +0800 Subject: [PATCH] refactor: enhance knowledge retrieval logic for workspace management and x-pack EE --- apps/knowledge/serializers/knowledge.py | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/apps/knowledge/serializers/knowledge.py b/apps/knowledge/serializers/knowledge.py index a35adbfa3..4d87c0636 100644 --- a/apps/knowledge/serializers/knowledge.py +++ b/apps/knowledge/serializers/knowledge.py @@ -292,8 +292,17 @@ class KnowledgeSerializer(serializers.Serializer): ] ) + @staticmethod + def is_x_pack_ee(): + workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping") + role_permission_mapping_model = DatabaseModelManage.get_model("role_permission_mapping_model") + return workspace_user_role_mapping_model is not None and role_permission_mapping_model is not None + def one(self): self.is_valid() + workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id')) + is_x_pack_ee = self.is_x_pack_ee() + query_set_dict = { 'default_sql': QuerySet( model=get_dynamics_model({'temp.id': models.CharField()}) @@ -303,11 +312,22 @@ class KnowledgeSerializer(serializers.Serializer): ).filter(**{'knowledge.user_id': self.data.get("user_id")}), 'folder_query_set': QuerySet(KnowledgeFolder) } + if not workspace_manage: + query_set_dict['workspace_user_resource_permission_query_set'] = QuerySet( + WorkspaceUserResourcePermission).filter( + auth_target_type="KNOWLEDGE", + workspace_id=self.data.get('workspace_id'), + user_id=self.data.get("user_id") + ) all_application_list = [str(adm.get('id')) for adm in self.list_application(with_valid=False)] knowledge_dict = native_search(query_set_dict, select_string=get_file_content( - os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge.sql')), with_search_one=True) - if knowledge_dict is None: - return None + os.path.join( + PROJECT_DIR, "apps", "knowledge", 'sql', + 'list_knowledge.sql' if workspace_manage else ( + 'list_knowledge_user_ee.sql' if is_x_pack_ee else 'list_knowledge_user.sql' + ) + ) + ), with_search_one=True) return { **knowledge_dict, 'meta': json.loads(knowledge_dict.get('meta', '{}')),