使用石墨烯和 SQLalchemy 为 GraphQL 设置权限很热门

Posted

技术标签:

【中文标题】使用石墨烯和 SQLalchemy 为 GraphQL 设置权限很热门【英文标题】:Hot to set up permissions for GraphQL with graphene and SQLalchemy 【发布时间】:2018-06-27 02:11:11 【问题描述】:

我的石墨烯架构上有客户、用户、项目和旅行:

class Clients(SQLAlchemyObjectType):
    class Meta:
        model = ClientModel
        interfaces = (relay.Node, )

class Users(SQLAlchemyObjectType):
    class Meta:
        model = UserModel
        interfaces = (relay.Node, )

class Projects(SQLAlchemyObjectType):
    class Meta:
        model = ProjectModel
        interfaces = (relay.Node, )

class Trips(SQLAlchemyObjectType):
    class Meta:
        model = TripModel
        interfaces = (relay.Node, )

我想要做的是设置权限,以便有人传递与特定客户匹配的访问令牌,并仅显示该特定客户的用户、项目和旅行。

如何做到这一点?石墨烯有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

我用flask_httpauth做到了:

from flask_httpauth import HTTPTokenAuth
@auth.verify_token
def verify_token(token):
    for client in ClientModel.query.all():
        if client.access_token == token:
            g.current_user = client
            return True
    return False

然后我只是将 login_required 装饰器放在我的 Query 类的每个 resolve_ 函数上,如下所示:

@auth.login_required
    def resolve_clients(self, info):
        current_client = g.current_user
        for client in ClientModel.query.all():
            if client.id == current_client.id:
                return client
        return None

【讨论】:

以上是关于使用石墨烯和 SQLalchemy 为 GraphQL 设置权限很热门的主要内容,如果未能解决你的问题,请参考以下文章

石墨烯和 Django 关于关系

如何将 pyspark、石墨烯和烧瓶结合在一起?

石墨烯突变未映射 SQLAlchemy 中的模型

为中继自动生成 graphql 模式(石墨烯服务器)

带有 Flask 的石墨烯不加载模式

如何覆盖石墨烯中的 DjangoModelFormMutation 字段类型?