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

阅读时长 7 分钟读完

在前端开发中,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