def add_assets(self, data: list, user, asset_perms_id): if settings.PERM_SINGLE_ASSET_TO_UNGROUP_NODE: all_assets = get_user_granted_all_assets( user, via_mapping_node=False, include_direct_granted_assets=False, asset_perms_id=asset_perms_id) else: all_assets = get_user_granted_all_assets( user, via_mapping_node=False, include_direct_granted_assets=True, asset_perms_id=asset_perms_id) all_assets = all_assets.annotate( parent_key=F('nodes__key')).prefetch_related('platform') data.extend(self.serialize_assets(all_assets))
def get_user_favorite_assets(cls, user): from assets.models import Asset from perms.utils.asset.user_permission import get_user_granted_all_assets asset_ids = get_user_granted_all_assets(user).values_list('id', flat=True) query_name = cls.asset.field.related_query_name() return Asset.org_objects.filter(**{ f'{query_name}__user_id': user.id }, id__in=asset_ids).distinct()
def list(self, request: Request, *args, **kwargs): """ 此算法依赖 UserGrantedMappingNode 获取所有授权的节点和资产 Node = UserGrantedMappingNode + 授权节点的子节点 Asset = 授权节点的资产 + 直接授权的资产 """ user = request.user rebuild_user_tree_if_need(request, user) all_nodes = get_user_granted_nodes_list_via_mapping_node(user) all_assets = get_user_granted_all_assets(user) all_assets = all_assets.annotate(parent_key=F('nodes__key')) all_assets = all_assets.prefetch_related('platform') data = [ *self.serialize_nodes(all_nodes, with_asset_amount=True), *self.serialize_assets(all_assets) ] return Response(data=data)
def get_queryset(self): if getattr(self, 'swagger_fake_view', False): return Asset.objects.none() queryset = get_user_granted_all_assets(self.user) queryset = queryset.prefetch_related('platform') return queryset.only(*self.only_fields)
def get_queryset(self): queryset = get_user_granted_all_assets(self.user) queryset = queryset.prefetch_related('platform') return queryset.only(*self.only_fields)