npm 包 @nico29/graphql-shield 使用教程

在前端开发中,GraphQL 是近年来变得越来越流行的一种数据查询语言。但是,在使用 GraphQL 进行查询时,很少有人提到如何保护 GraphQL 查询的安全性。为了解决这个问题,@nico29 开发了一个 npm 包 @nico29/graphql-shield,可以在 GraphQL 查询中实现安全控制。

什么是 @nico29/graphql-shield

@nico29/graphql-shield 是一个基于 JavaScript 的 npm 包,它可以为 GraphQL 查询提供安全控制。通过使用该包,开发者可以在 GraphQL 查询中定义自定义的权限逻辑。更重要的是,它还可以根据不同的权限逻辑为不同的用户提供不同的实时数据。通过使用 @nico29/graphql-shield,开发者可以摆脱传统的“一刀切”的数据访问控制方式,实现更加灵活的访问控制策略。

如何使用 @nico29/graphql-shield

以下是使用 @nico29/graphql-shield 的三个简单步骤:

第一步:安装 @nico29/graphql-shield

在使用 @nico29/graphql-shield 之前,我们需要将它安装到项目中。在项目的根目录下使用以下命令:

--- ------- ----------------------

第二步:定义权限逻辑

在使用 @nico29/graphql-shield 时,我们需要定义一个或多个“shield”用于实现权限逻辑。Shield 是一组定义了如何检查访问权限的函数,包括 allow、deny、and 以及 or。在我们的例子中,我们定义了一个简单的 shield 用于检查用户是否具有特定的权限。

----- - ------ ----- ------ - - ----------------------------------

----- ----------- - --------
    ------ -
        ------ ------
        -------- -----
    -
---

上面的例子定义了一个简单的权限设置,它允许用户查询 books,但禁止用户查询 authors。需要注意的是,我们通过调用 allow、deny 函数来定义这些权限设置。

第三步:使用权限设置

在定义好权限设置之后,我们需要将其应用到 GraphQL 服务中。在我们的例子中,我们使用 Apollo Server 来创建一个 GraphQL 服务。

----- - ------------ - - -------------------------
----- - -------------------- - - ---------------------------------
----- - --------------- - - ------------------------------
----- ----------- - -------------------------

----- -------- - -
    ---- ---- -
        --- ---
        ------ -------
        ------- -------
    -

    ---- ----- -
        ------ --------
        -------- ----------
    -
--

----- --------- - -
    ------ -
        ------ -- -- -
            - --- ---- ------ ----- --- ------- ------- -- --
            - --- ---- ------ ----- --- ------- ------- -- --
        --
        -------- -- -- -------- --- ------- ----
    -
--

----- ------ - ----------------------
    ---------
    ----------
---

----- -------------------- - ----------------------- -------------

----- ------ - --- --------------
    ------- ---------------------
---

----------------------- --- -- -- -
    --------------- ------ ----- -- ---------
---

在上面的例子中,我们使用了 Apollo Server 来创建一个 GraphQL 服务。我们将定义好的权限设置通过 applyMiddleware 函数应用到 GraphQL 服务中,如下所示:

----- -------------------- - ----------------------- -------------

现在我们可以启动 GraphQL 服务,并发送一条查询语句:

----- -
  ----- -
    --
    -----
  -
  -------
-

在上面的查询语句中,我们尝试查询两个字段 books 和 authors。但是,根据我们定义的权限设置,我们应该只能查询到 books,而不能查询 authors。

实例代码

以下是使用 @nico29/graphql-shield 的完整代码示例,供大家参考:

----- - ------ ----- ------ - - ----------------------------------

----- ----------- - --------
    ------ -
        ------ ------
        -------- -----
    -
---

----- - ------------ - - -------------------------
----- - -------------------- - - ---------------------------------
----- - --------------- - - ------------------------------

----- -------- - -
    ---- ---- -
        --- ---
        ------ -------
        ------- -------
    -

    ---- ----- -
        ------ --------
        -------- ----------
    -
--

----- --------- - -
    ------ -
        ------ -- -- -
            - --- ---- ------ ----- --- ------- ------- -- --
            - --- ---- ------ ----- --- ------- ------- -- --
        --
        -------- -- -- -------- --- ------- ----
    -
--

----- ------ - ----------------------
    ---------
    ----------
---

----- -------------------- - ----------------------- -------------

----- ------ - --- --------------
    ------- ---------------------
---

----------------------- --- -- -- -
    --------------- ------ ----- -- ---------
---

总结

@nico29/graphql-shield 是一个非常有用的 npm 包,它可以为 GraphQL 查询提供灵活的访问控制策略。在使用 @nico29/graphql-shield 时,我们需要定义一个或多个“shield”用于实现权限逻辑,并将它们应用到 GraphQL 服务中。通过使用 @nico29/graphql-shield,开发者可以为不同的用户提供不同的实时数据,从而实现更加灵活的数据访问控制策略。希望本文对您学习 @nico29/graphql-shield 有所帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/109132


猜你喜欢

  • npm 包 images-preview 使用教程

    在 web 前端开发中,图片是常见的一种资源。而在图片展示这一环节,就需要用到图片预览。如果每次都需要手动编写预览代码,那非常麻烦。于是我们可以使用 npm 包 images-preview,它提供一...

    5 年前
  • npm 包 imagebox 使用教程

    在前端开发中,经常需要使用图片展示,而 imagebox 是一个方便快捷的 npm 包,可以方便地实现图片的查看、旋转、缩放等操作。本文将详细介绍 imagebox 的使用方法,包括安装、引入、基本用...

    5 年前
  • npm 包 component-spinner 使用教程

    前言 在前端开发中,有时需要在页面中添加一些等待提示效果,例如加载中、提交中等。为了避免每次开发时都需要重新编写这些效果,我们可以使用 npm 包 component-spinner,来快速添加这些效...

    5 年前
  • npm 包 component-piecon 使用教程

    在前端开发中,我们经常需要给网页添加小图标,来提高网页的可视化效果。component-piecon 是一个方便的 npm 包,可以轻松地为网页添加小图标。本篇文章将详细介绍 component-pi...

    5 年前
  • npm 包 audio-component 使用教程

    在现代 Web 开发中,我们经常会需要使用音频元素来播放和控制音频。然而,使用原生的 HTML5 音频组件存在一些局限性,例如缺少自定义样式和控制等。在这种情况下,npm 包 audio-compon...

    5 年前
  • npm 包 poor 使用教程

    在前端开发中,npm 是我们经常使用的工具之一。而 poor 是一个用于在项目中生成假数据的 npm 包,能够让我们更轻松地进行开发和测试。下面我们来学习一下如何正确地使用 poor。

    5 年前
  • npm 包 peddler 使用教程

    介绍 在前端开发过程中,我们可能经常需要进行上传图片等文件的操作。这时候,使用 npm 包 peddler 可以非常方便地实现相关功能。 peddler 是一个轻量级的基于 Promise 的文件上传...

    5 年前
  • npm 包 wildcards 使用教程

    在前端开发中,有时候我们会需要批量安装或卸载一组 npm 包,此时我们可以使用 npm 包 wildcards 来帮助我们快速实现。本文将为大家详细介绍如何使用 npm 包 wildcards。

    5 年前
  • npm 包 multistream-select 使用教程

    Multistream-select 是一个基于 Node.js 平台的 npm 包,用于选择并行流的第一个可用流。它可以在您的 Node.js 项目中用于实现并行流的选择,从而提高您的应用程序的性能...

    5 年前
  • npm 包 libp2p-identify 使用教程

    在区块链网络中,节点之间通信十分重要,而 libp2p 作为一种适用于点对点应用程序的网络协议栈,提供了一种灵活可靠的节点间通信解决方案。其中的 libp2p-identify 是一个使用 libp2...

    5 年前
  • npm 包 libp2p-circuit 使用教程

    简介 在分布式系统中,无论是 P2P 网络,还是分布式的应用程序,都需要一些方式来进行跨节点通信。 libp2p-circuit 就是一个用于打通两个 NAT(网络地址转换)设备之间连接的 npm 包...

    5 年前
  • npm包pull-catch使用教程

    在前端开发中,我们经常需要从一个API端点获取数据。在这个过程中,我们常常需要使用一些标准的错误处理方式,例如try-catch等。然而,这些方法的使用可能会变得非常重复和乏味,因此这个时候就需要一些...

    5 年前
  • npm 包 interface-connection 使用教程

    简介 interface-connection 是一款前端 JavaScript 库,可以实现浏览器端和服务端之间的双向数据通信。它是一种面向接口编程的思想,可以让开发人员更加方便地对接不同的后台接口...

    5 年前
  • npm 包 intellinote-cli 使用教程

    前言 在前端开发中,使用 npm 包极为普遍,而 intellinote-cli 是一个非常好用的 npm 包,它可以用于在命令行中创建云笔记,方便我们在编程过程中记录和整理思路。

    5 年前
  • npm 包 hnews 使用教程

    在前端开发过程中,我们常常需要获取新闻内容。这时候,可以使用 npm 包 hnews,它提供了简单易用的 API,可以获取 Hacker News 上的新闻内容。 安装 hnews 我们可以使用 np...

    5 年前
  • npm 包 febs-source 使用教程

    在前端开发中,我们经常需要进行数据异步加载和处理。为了方便地完成这些操作,很多前端工程师利用 npm 包对自己开发的代码进行打包,以方便使用和分享。在这篇文章中,我们将介绍一款名为 febs-sour...

    5 年前
  • npm包 febs-cmd 使用教程

    简介 febs-cmd 是一个基于Node.js平台的前端命令行工具,旨在简化前端工程师的日常开发工作。 安装 --- ------- -- --------使用 1. febs-cmd create...

    5 年前
  • npm 包 eprice 使用教程

    什么是 eprice eprice 是一款基于 Node.js 的 npm 包,它提供了一些计算价格的函数。 安装 eprice 在终端中使用以下命令安装 eprice: --- ------- --...

    5 年前
  • npm 包 douban.fm 使用教程

    前言 Douban.fm 是豆瓣开发的一个音乐播放器,它基于 Node.js 和 Electron 开发,支持多个平台,可以让你听到豆瓣音乐程序的非常鲜明的特点,特别是音乐风格。

    5 年前
  • npm 包 btc 使用教程

    前言 在前端开发中,我们常常会遇到需要在网页中显示比特币价格的需求。为了方便我们在项目中使用,开发者们开发了许多相应的 npm 包来帮助我们在项目中快速引入和使用比特币价格相关的数据和功能。

    5 年前

相关推荐

    暂无文章