在 GraphQL 应用中,常常需要进行权限校验,以保证数据安全性。本文章介绍了 npm 包 graphql-shield-rules 的介绍、使用方法以及示例代码,帮助大家快速上手 GraphQL 的权限校验。
什么是 graphql-shield-rules?
graphql-shield-rules 是一款基于 graphql-shield 封装的,用于简化配置的 GraphQL 权限校验工具。通过定义简洁的规则来控制 GraphQL 请求的合法性。
安装
npm install graphql graphql-shield graphql-shield-rules
如何使用
定义规则
-- -------------------- ---- ------- ------ - ------ ---- - ---- ---------------------- ------ - ---- - ---- -------------- ----- --------------- - ----- ------ ----- ----- ---- -------- ---- -- - -- --------------- - ------ ------------ - -- ------- - ------ ------------- - -- ---------------- - ------ --------------- - ------ ------- - ----- ------- - ----- ------ ----- ----- ---- -------- ---- -- - -- ------- - ------ ------------- - -- ----------------------- - ------ ------------------ - ------ ------- - ----- ----- - - ------ - ----- ---------------- ------ -------- -- --------- - ----------- ---------------- ----------- -------- -- -
以上代码定义了两个规则:isAuthenticated 和 isAdmin,分别用于判断用户是否已登录和是否拥有管理员权限。
应用规则
-- -------------------- ---- ------- ------ - -------------------- - ---- --------------- ------ - --------------- - ---- -------------------- ------ - ---------------- ------- - ---- --------- ----- -------- - - ---- ---- - --- ---- ----- ------- ---------- ------- ---------- ------- ---------- ------ - ---- ----- - -------- ------ ----- ------ ------ - ---- -------- - -------------- ----- ----- -------- ----- -------------- ------ -------- - - ----- --------- - - ------ - ----- ----- ------ - -- -- -- - ------ ----- ----------------- -- ------ ----- -- -- - ------ ----- -------------- -- -- --------- - ----- ---------------- - --- ---- -- - ----- ---- - ----- ----------------- ----- ------------- ---- -- ------ ---- -- ----- ---------------- - -- -- - ----- ---- - ----- ----------------- ----- -------------- ------ ---- -- -- - ----- ------ - ---------------------- --------- ---------- -- ----- -------------------- - ----------------------- ---------------- --------
以上代码使用 graphql-middleware 将定义的规则应用到 GraphQL schema 中,实现对指定接口的权限校验。
示例查询
-- -------------------- ---- ------- ----- - -------- -- - -- ---- --------- --------- - ----- - -- ---- --------- --------- - -
以上查询和 users 接口无关,isAuthenticated 规则会限制其访问。只有已登录用户才能访问 user 接口。
示例更改
mutation { updateUser(id: 1, name: "New Name") { id name createdAt updatedAt } }
以上更改操作和非管理员用户无关,isAdmin 规则会限制其访问。只有管理员用户才能访问 updateUser 和 deleteUser 接口。
总结
graphql-shield-rules 简化了 GraphQL 的权限校验操作,只需要简洁的规则定义,即可实现复杂的权限操作。本文章介绍了如何安装,定义规则以及如何应用规则的操作。希望对大家的学习和工作有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedb4d4b5cbfe1ea0611367