MCPcopy Index your code
hub / github.com/1Panel-dev/MaxKB / get_folder_tree

Method get_folder_tree

apps/folders/serializers/folder.py:334–377  ·  view source on GitHub ↗
(self,
                        current_user, name=None)

Source from the content-addressed store, hash-verified

332 return False
333
334 def get_folder_tree(self,
335 current_user, name=None):
336 self.is_valid(raise_exception=True)
337 user_id = current_user.id
338 workspace_id = self.data.get('workspace_id')
339 source = self.data.get('source')
340
341 Folder = get_folder_type(source) # noqa
342
343 # 检查特定工作空间的树结构完整性
344 workspace_folders = Folder.objects.filter(workspace_id=workspace_id)
345 # 如果发现数据不一致,重建整个表(这是 MPTT 的限制)
346 if self._check_tree_integrity(workspace_folders):
347 Folder.objects.rebuild()
348
349 workspace_manage = is_workspace_manage(user_id, workspace_id)
350
351 base_q = Q(workspace_id=workspace_id)
352
353 if name is not None:
354 base_q &= Q(name__contains=name)
355 if not workspace_manage:
356 having_read_permission_by_role = has_exact_permission_by_role(user_id, workspace_id,
357 f"{source}_FOLDER:READ",
358 RoleConstants.USER.value.__str__())
359 permission_condition = ['VIEW']
360 if having_read_permission_by_role:
361 permission_condition = ['VIEW', 'ROLE']
362
363 base_q &= (Q(id__in=WorkspaceUserResourcePermission.objects.filter(user_id=current_user.id,
364 auth_target_type=self.data.get('source'),
365 workspace_id=self.data.get(
366 'workspace_id'),
367 permission_list__overlap=permission_condition)
368 .values_list(
369 'target', flat=True)) | Q(id=self.data.get('workspace_id')))
370
371 nodes = Folder.objects.filter(base_q).get_cached_trees()
372
373 TreeSerializer = get_folder_tree_serializer(self.data.get('source')) # noqa
374 serializer = TreeSerializer(nodes, many=True)
375
376 return [d for d in serializer.data if
377 d.get('id') == d.get('workspace_id')] if name is None else serializer.data # 这是可序列化的字典

Callers 1

getMethod · 0.80

Calls 8

_check_tree_integrityMethod · 0.95
is_workspace_manageFunction · 0.90
get_folder_typeFunction · 0.85
is_validMethod · 0.45
getMethod · 0.45
__str__Method · 0.45

Tested by

no test coverage detected