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))
Exemple #2
0
 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)
Exemple #5
0
 def get_queryset(self):
     queryset = get_user_granted_all_assets(self.user)
     queryset = queryset.prefetch_related('platform')
     return queryset.only(*self.only_fields)