微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我需要从石墨烯查询发送响应问题是响应应该只包含基于用户角色的特定字段

如何解决我需要从石墨烯查询发送响应问题是响应应该只包含基于用户角色的特定字段

例如: 如果用户是该组的成员,则响应将包含包括该组成员在内的所有组信息,否则响应将仅包含组内成员的计数。 我正在使用 graphene-django 并且需要从查询模式返回此数据。

class GroupMutation(graphene.Mutation):
    group = graphene.Field(GroupType)

    class Arguments:
        id = graphene.ID(required=False)
        created_by = graphene.ID(required=False) 
        admins = graphene.ID(required=False)
        moderators = graphene.ID(required=False)
        users = graphene.List(graphene.ID)
        name = graphene.String(required = True)
        public = graphene.Boolean(required=False)
        location = graphene.String(required=False)
        reported = graphene.Boolean(required=False)
        reported_by = graphene.List(graphene.ID)
        profile_picture = Upload(required=False)
        background_picture = Upload(required=False)

解决方法

您的 GraphQL/Graphene schema 将需要包含这两个字段,因为架构不能根据用户有条件地更改,但您可以有条件地选择填充这些字段响应基于用户应该访问的内容。

例如:

import graphene

class GroupNode(graphene.ObjectType):
    # Assume MemberNode is defined elsewhere
    members = graphene.List(MemberNode) 
    members_count = graphene.Int()

    def resolve_members(parent,info):
        if info.context.user.username == 'allowed_user':
            return Members.objects.all() # whatever logic you need
        # Return nothing if the user is not allowed
        return None

    def resolve_members_count(parent,info):
        if info.context.user.username == 'allowed_user':
            # We don't need to return this,since the user can access `members` directly
            return None
        return Members.objects.count()

请注意,这两个字段都需要可以为空(即您不能传递 required=True),以便您可以选择在 resolve_ 方法中省略它们。 (或者,您可以选择使用 membersrequired=True 而不是 return [] 使 return None 非空,如果这样更方便。)

还有一些其他类型的 authorization examples Graphene-Django docs,以防万一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。