Графен / Джанго (GraphQL): как выполнить запрос с исключением некоторых полей из доступа?
Моя схема проста. Модель на заказ от django.
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = ['username', 'email', ]
class UserNode(DjangoObjectType):
class Meta:
model = User
only_fields = (
'username',
'email',
'is_staff',
'is_active',
'is_superuser',
'last_login',
'date_joined',
'profile',
)
interfaces = (graphene.relay.Node, )
@classmethod
def get_node(cls, info, id):
try:
user = cls._meta.model.objects.get(id=id)
except cls._meta.model.DoesNotExist:
return None
if user:
return user
return None
class Query(graphene.ObjectType):
users = DjangoFilterConnectionField(
UserNode,
filterset_class=UserFilter,
)
def resolve_users(self, info):
user = info.context.user
if user.is_anonymous:
raise Exception('You aren't autorized')
elif not user.is_superuser:
return get_user_model().objects.defer("email")
elif user.is_superuser:
return get_user_model().objects.all().select_related('profile')
else:
raise Exception('Error')
Когда я делаю запрос от пользователя, который не является суперпользователем, и в схеме я указываю поле "электронная почта", ответ дает значение этого поля.
query{
users{
edges{
node{
id
username
email
isSuperuser
}
}
}
}
Я получил:
{
"data": {
"users": {
"edges": [
{
"node": {
"id": "VXNlck5vZGU6NQ==",
"username": "Test4",
"email": "Test4@test.ru",
"isSuperuser": false
}
}
]
}
}
}
Можно ли как то разграничить доступ к полям в resol_users? Исключение в фильтре не работает. Возможно, я не правильно понимаю дизайн DjangoFilterConnectionField, и мне следует использовать обычный список для вывода в GraphQL.