在 GraphQL/Relay 中处理隐私

Posted

技术标签:

【中文标题】在 GraphQL/Relay 中处理隐私【英文标题】:Handling Privacy in GraphQL/Relay 【发布时间】:2016-11-02 10:30:04 【问题描述】:

我有一个用户的应用程序,该应用程序具有许多属性,其中一些是公共的,一些是默认私有的,如果用户选择这样做,它们可以变为公共的。

如何处理私有属性的获取? 我的意思是,我想要这样,例如,如果我尝试获取所有用户的属性,我将获得他的所有公共属性,以及他的私有属性的一些空值(而不是未经授权的错误消息)。

我还想以某种方式覆盖它,这样用户就可以轻松获取他的所有数据。

【问题讨论】:

【参考方案1】:

您的字段的隐私应在服务器端完成。

您可以将用户模型的全局解析函数中的所有私有属性设置为空,或者在潜在的私有属性中添加解析函数。

然后使用中继获取所有内容。我是你的组件,你检查空值并显示你想要的(例如一个 Lock 来表明该值是私有的)

希望对你有帮助

【讨论】:

【参考方案2】:

正如 DARK_DUCK 已经说过的:您将决定在 GraphQL 服务器端架构中属性的解析方法中为某个用户返回什么。

我将用户身份验证所需的数据保存在 cookie 中。然后我将此身份验证数据传递给根值中的 GraphQL 模式。在私有用户数据的解析方法中,我检查访问权限并返回适当的数据(null 或实际数据)。

我制作了一个小型示例存储库,介绍如何使用中继和 graphql 处理身份验证和私有数据。有关详细示例,请参阅 this file 和 posts 属性。

【讨论】:

以上是关于在 GraphQL/Relay 中处理隐私的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GraphQL (Relay) 中查询和改变数组类型?

Graphql + Relay graphql-relay-js 依赖

GraphQL + Relay:如何执行重新获取授权?

GraphQL / Relay - 是不是需要在主 QueryRenderer 中查询所有表?

在 graphql/relay 中维护有序列表

GraphQL 和 Relay 的概念