|
19 | 19 |
|
20 | 20 | from application.models import ApplicationKnowledgeMapping |
21 | 21 | from common.config.embedding_config import VectorStore |
| 22 | +from common.database_model_manage.database_model_manage import DatabaseModelManage |
22 | 23 | from common.db.search import native_search, get_dynamics_model, native_page_search |
23 | 24 | from common.db.sql_execute import select_list |
24 | 25 | from common.event import ListenerManagement |
|
36 | 37 | from knowledge.task.sync import sync_web_knowledge, sync_replace_web_knowledge |
37 | 38 | from maxkb.conf import PROJECT_DIR |
38 | 39 | from models_provider.models import Model |
| 40 | +from users.serializers.user import is_workspace_manage |
39 | 41 |
|
40 | 42 |
|
41 | 43 | class KnowledgeModelSerializer(serializers.ModelSerializer): |
@@ -108,6 +110,12 @@ class Query(serializers.Serializer): |
108 | 110 | allow_blank=True, max_length=256, min_length=1) |
109 | 111 | user_id = serializers.UUIDField(required=False, label=_('user id'), allow_null=True) |
110 | 112 |
|
| 113 | + @staticmethod |
| 114 | + def is_x_pack_ee(): |
| 115 | + workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping") |
| 116 | + role_permission_mapping_model = DatabaseModelManage.get_model("role_permission_mapping_model") |
| 117 | + return workspace_user_role_mapping_model is not None and role_permission_mapping_model is not None |
| 118 | + |
111 | 119 | def get_query_set(self): |
112 | 120 | workspace_id = self.data.get("workspace_id") |
113 | 121 | query_set_dict = {} |
@@ -150,28 +158,44 @@ def get_query_set(self): |
150 | 158 | def page(self, current_page: int, page_size: int): |
151 | 159 | self.is_valid(raise_exception=True) |
152 | 160 |
|
153 | | - folder_id = self.data.get('folder_id', 'root') |
| 161 | + folder_id = self.data.get('folder_id', self.data.get("workspace_id")) |
154 | 162 | root = KnowledgeFolder.objects.filter(id=folder_id).first() |
155 | 163 | if not root: |
156 | 164 | raise serializers.ValidationError(_('Folder not found')) |
| 165 | + workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id')) |
157 | 166 |
|
158 | 167 | return native_page_search( |
159 | 168 | current_page, |
160 | 169 | page_size, |
161 | 170 | self.get_query_set(), |
162 | 171 | select_string=get_file_content( |
163 | | - os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge.sql') |
| 172 | + os.path.join( |
| 173 | + PROJECT_DIR, |
| 174 | + "apps", |
| 175 | + "knowledge", 'sql', |
| 176 | + 'list_knowledge.sql' if workspace_manage else ( |
| 177 | + 'list_knowledge_user_ee.sql' if self.is_x_pack_ee() else 'list_knowledge_user.sql' |
| 178 | + ) |
| 179 | + ) |
164 | 180 | ), |
165 | 181 | post_records_handler=lambda r: r |
166 | 182 | ) |
167 | 183 |
|
168 | 184 | def list(self): |
169 | 185 | self.is_valid(raise_exception=True) |
| 186 | + workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id')) |
| 187 | + |
170 | 188 | return native_search( |
171 | 189 | self.get_query_set(), |
172 | 190 | select_string=get_file_content( |
173 | | - os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge.sql') |
174 | | - ) |
| 191 | + os.path.join( |
| 192 | + PROJECT_DIR, |
| 193 | + "apps", |
| 194 | + "knowledge", 'sql', |
| 195 | + 'list_knowledge.sql' if workspace_manage else ( |
| 196 | + 'list_knowledge_user_ee.sql' if self.is_x_pack_ee() else 'list_knowledge_user.sql' |
| 197 | + ) |
| 198 | + )) |
175 | 199 | ) |
176 | 200 |
|
177 | 201 | class Operate(serializers.Serializer): |
@@ -433,7 +457,7 @@ def save_base(self, instance, with_valid=True): |
433 | 457 | if with_valid: |
434 | 458 | self.is_valid(raise_exception=True) |
435 | 459 | KnowledgeBaseCreateRequest(data=instance).is_valid(raise_exception=True) |
436 | | - folder_id = instance.get('folder_id', 'root') |
| 460 | + folder_id = instance.get('folder_id', self.data.get('workspace_id')) |
437 | 461 | if QuerySet(Knowledge).filter(workspace_id=self.data.get('workspace_id'), |
438 | 462 | folder_id=folder_id, |
439 | 463 | name=instance.get('name')).exists(): |
@@ -495,7 +519,7 @@ def save_web(self, instance: Dict, with_valid=True): |
495 | 519 | self.is_valid(raise_exception=True) |
496 | 520 | KnowledgeWebCreateRequest(data=instance).is_valid(raise_exception=True) |
497 | 521 |
|
498 | | - folder_id = instance.get('folder_id', 'root') |
| 522 | + folder_id = instance.get('folder_id', self.data.get('workspace_id')) |
499 | 523 | if QuerySet(Knowledge).filter(workspace_id=self.data.get('workspace_id'), |
500 | 524 | folder_id=folder_id, |
501 | 525 | name=instance.get('name')).exists(): |
|
0 commit comments