GraphQL 实现“不允许”

Posted

技术标签:

【中文标题】GraphQL 实现“不允许”【英文标题】:GraphQL implement "not permitted" 【发布时间】:2021-02-18 01:58:23 【问题描述】:

我有一个由我实现的权限系统管理的 GraphQL API。

我尝试使用 Graphql-shield,但如果客户端请求禁止字段,我不想在整个请求中出错,因此我实现了自己的权限系统。

现在,我需要解决一个问题:

我实现权限系统的方式意味着检查每个字段是否允许,如果不允许则返回 null。但是,我想返回一些指示,表明该字段实际上不是 null,而是该字段“不允许”。

我考虑过两种方式:

在每次检查期间,我将所有不可访问的字段附加到某个查询范围的变量,并将其与查询一起返回(可能在某种中间件中) 我使用“允许”字段扩展架构中的所有对象,并在该字段中返回权限值

有什么建议吗?

【问题讨论】:

【参考方案1】:

恕我直言,不值得付出努力...... api faq 或文档(在 graphiql/playground 中可用)可以包含有关“意外空值”、ACL 响应等的通知。这对于大多数用例来说已经足够了。

如果您仍想在响应扩展中包含一些 [debug] 信息,那么 f.e. https://github.com/apollographql/apollo-tracing,- 在这种情况下:

只需附上“字段访问被拒绝”[结构化]通知列表即可; 在某些上下文对象中收集它们(在解析器中/从解析器中),附加到中间件 (?) 中,然后返回整体响应;

使其也可配置(调试模式)。

【讨论】:

以上是关于GraphQL 实现“不允许”的主要内容,如果未能解决你的问题,请参考以下文章

为什么GitHub的Graphql和Yelp GraphQL不允许多个排序依据字段?

GraphQL 错误:方法不允许。必须是以下之一: 选项

如何使用环回 4 进行修复(将 rest 转换为 graphql):OPTIONS http://localhost:3001/graphql 405(不允许的方法)

不允许使用 JWT 令牌保护 GraphQL 端点

GraphQL 不允许在 NodeJS 中插入数组对象

在graphql中实现多个接口