Ale*_*lec 8 authentication access-control node.js graphql
背景:
我有一组模型,包括用户和其他各种模型,其中一些模型包含对用户的引用.我通过Graffiti生成的GraphQL API公开这些模型以进行查询,使用graffiti-mongoose适配器为Mongo数据库提供支持.我当前的REST API(我正在迁移到GraphQL)使用JSON Web令牌对用户进行身份验证,并在服务器端具有一些自定义权限逻辑来处理访问控制.
问题:
我想基于当前登录用户限制对GraphQL中对象的访问.某些模型应该可以通过未经身份验证的调用进行读取.大多数其他模型只能由创建它们的用户访问.通过Graffiti生成的API管理对象访问控制的最佳方法是什么?
一般来说,GraphQL是否有良好的访问控制模式?特别是,Graffiti有没有很好的例子或库?
笔记:
我知道钩子的前后挂钩已经实现了涂鸦 - 猫鼬,并且它们可以用来进行基本的二进制检查以进行身份验证.我想看看如何在GraphQL API中使用更详细的访问控制逻辑.将来,我们希望支持管理员等可以访问由特定用户组创建的模型实例的用户(例如,其附属关系包含管理员用户的用户).
通常,GraphQL不直接处理访问控制,而是将该职责委托给它所连接的任何数据系统.在你的情况下听起来像猫鼬.
由于访问控制逻辑通常是任意逻辑(例如,该用户是否已禁止某些内容?该内容的发布者是否使用自定义隐私设置限制它?等等),听起来像您的情况下这个访问控制逻辑是实际上是自定义的,它应该存在于"resolve"函数中,该函数为GraphQL字段生成一个值.
例如:
var UserType = new GraphQLObjectType({
name: 'User',
fields: {
name: { type: GraphQLString },
birthday: {
type: GraphQLString,
resolve(user, context) {
var auth = context.myLoggedInAuth;
if (myCanAuthSeeBirthday(auth, user)) {
return user.birthday;
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4596 次 |
| 最近记录: |