我如何限制谁可以使用 graphene-django 访问 GraphiQL API 浏览器?

How can I restrict who has access to the GraphiQL API browser with graphene-django?

Graphene-Django docs 请注意,如果您不想使用 GraphiQL API 浏览器,则可以在实例化 GraphQLView 时传递 graphiql=False。但是,我想保持 GraphiQL API 浏览器可用,并且只限制有权访问它的人。怎么办?

例如,我该如何做到只有“员工”用户(可以访问管理站点的人)才有权访问 GraphiQL 浏览器?

您可以扩展 Graphene-Django GraphQLView 并覆盖其 can_display_graphiql 方法(已定义 here)以添加此类逻辑。

from graphene_django.views import GraphQLView as BaseGraphQLView

class GraphQLView(BaseGraphQLView):
    @classmethod
    def can_display_graphiql(cls, request, data):
        # Only allow staff users to access the GraphiQL interface
        if not request.user or not request.user.is_staff:
            return False
        return super().can_display_graphiql(request, data)

然后在您的 urls.py 文件中,使用新的 GraphQLView 而不是默认文件:

# import the GraphQLView defined above
urlpatterns = [
    # ...
    path("graphql", GraphQLView.as_view(graphiql=True)),
]