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)