简介
graphql-directive-private 是一个适用于 GraphQL 所使用的 Directive 的 npm 包,用于控制 GraphQL 查询结果中私有字段的可见性。通过使用该 npm 包,开发人员可以轻松地控制将哪些字段暴露给用户,以确保数据的隐私。
安装
首先,在终端中使用以下命令来安装该 npm 包:
npm install graphql-directive-private
如何使用
1. 在服务端设置指令
在服务端的 GraphQL schema 中,需要使用指令来标记私有字段,这样才能使用 graphql-directive-private 控制可见性。
以下是设置指令的示例:
directive @private on FIELD_DEFINITION
如上示例中,定义了一个名为 private
的指令并应用于 FIELD_DEFINITION
类型上。
2. 编写查询语句
在编写查询语句时,需要使用 @private
指令来标记需要控制的私有字段,这些字段只有在使用了正确的身份验证信息才能被查看到。下面是一个查询语句示例:
query { user(id: 1) { name email @private phone @private(role: "admin") } }
在上面的查询语句示例中,name
字段是公开可见的,email
和 phone
字段是私有的。对于 email
字段,只有经过身份验证的用户才能看到,而对于 phone
字段,只有具有“admin”角色的用户才能看到。
3. 实现控制逻辑
为了实现控制逻辑,需要使用包中提供的 PrivateDirectiveTransformer
类,该类用于在 GraphQL resolvers 中实现字段的可见性控制逻辑。
以下是示例代码:
-- -------------------- ---- ------- ----- - --------------------------- - - ------------------------------------- ----- ---------------- - - -------- ---------------------------- -- ----- --------- - - -- -- ---- -------- ---- -------- ----- ----- ------------ -- ---- --- ----- ----- ---- -- ---- ------ - ----- ------ - -- -- -------- -- - ------ ----------------- --- ----- ----- ----- ------ ------------ - ---------------------- - ----- ------ ------------------------------------ - ---------- - ----- --- -- -- -- ----- ------ - --- -------------- --------- ---------- ----------------- -------- -- --- -- -- -- ----- -------- --- ---
在上面的示例代码中,我们首先将 PrivateDirectiveTransformer
导入进来,并将其存储在 schemaDirectives
对象中,然后在 ApolloServer
中传入该对象。
在 resolvers
对象中,我们使用 context
参数来检查当前用户是否登录,并根据具有的角色来返回相应的值。这里 email
字段只有在用户登录时才会有值,否则将为 null;phone
字段则只有具有“admin”角色的用户才能看到。这样,我们就实现了使用 graphql-directive-private
包控制字段的可见性逻辑。
结论
在本文中,我们简要介绍了 npm 包 graphql-directive-private,这是一个非常有用的工具,可以用于保护 GraphQL 查询结果中的私有字段。通过本文的演示,读者应该已经了解了如何安装、配置和使用该包。如果您正在开发一个需要控制 GraphQL 查询可见性的应用程序,那么这个包绝对是您无法错过的。希望本文能对您有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066b5f51ab1864dac671ac