Graphene Python: ¿Cómo obtener el usuario que ha iniciado sesión actualmente para el esquema? (API de Django Graphql)

CorePress2024-01-25  10

mi objetivo: estoy intentando devolver todos los campos de las publicaciones si el usuario tiene una identificación de 1, y quiero devolver solo 3 campos en caso contrario. Mi problema es: en la consulta o mutaciones puedo hacer info.context.user.id pero en el esquema no puedo hacer eso. Aquí en mi siguiente código puedes notar su variable no definida current_loggedin_user la cual no sé cómo obtener su valor.

import graphene
from graphene_django import DjangoObjectType
from . import models
from django.conf import settings


class Posts(DjangoObjectType):
    class Meta:
        model = models.ExtendUser
        if (current_logedin_user.id==1):
            field = '__all_'
        else:
            fields = ['username', 'id', 'imageUrl']



------------------------------------

Debe incluir todos los campos que sean visibles para cualquier persona en el esquema y luego personalizar los métodos de resolución para los campos que desea ocultar para algunos usuarios. Por ejemplo:

class Posts(DjangoObjectType):
    class Meta:
        model = models.ExtendUser
    def resolve_restricted_field(self, info):
        if info.context.user.id == 1:
            return self.restricted_field
        return None

Para más ejemplos, consulte¿Cómo limitar el acceso al campo en un modelo según el tipo de usuario en Graphene/Django?

2

No entiendo nada

- Ali Husham

29 de marzo de 2021 a las 9:34

1

Debe agregar un método resolve_ personalizado para cada campo que desee restringir.

-Mark Chackerian

29/03/2021 a las 21:30



------------------------------------

Pruebe algo como esto

    class Posts(DjangoObjectType):
        class Meta:
            model = models.ExtendUser

    class Query(ObjectType):
        fields = graphene.List(Posts)

        def resolve_fields(self, info, **kwargs):
            if info.context.user.pk == 1:
                return ExtendUser.objects.all()

            return ExtendUser.objects.values_list('username', 'id', 'imageUrl', flat=True)

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare