【问题标题】:Access Control Filtering of Query before its sent to Prisma server/DB查询发送到 Prisma 服务器/数据库之前的访问控制过滤
【发布时间】:2019-01-20 23:52:09
【问题描述】:

现在我正在使用accesscontrol 来管理 ACL,它运行良好。它看起来像这样:

const methods = {
  async update(parent, { data }, ctx, info) {
    const acUpdate = ac.can('role').updateOwn('model')
    if (! acUpdate.granted) throw new ACError()

    const filtered = acUpdate.filter({ ...data })
    return await ctx.db.mutation.updateOrganization({
      data: filtered,
      where: { id }
    }, info)
  }
}

但是,在 GraphQL 的 Query 方法上,我不知道如何过滤对数据库的请求。例如,在嵌套查询中,它可能如下所示:

{
  model {
    id
    name
    user {
      id
      name
      pictures {
        id 
        name
      }
    }
  }
}

所以在解析器上它会检查他们是否有权访问模型,然后它将请求发送到 Prisma 服务器而不过滤 GQL 模式。在这种情况下,假设用户有权读取模型但无权访问用户。理想情况下,我想在将实际请求模式(信息?)发送到 Prisma 之前对其进行permission.filter(...)。你们有没有人解决过这个问题?当然,它可以在请求解决后对其进行过滤,但这种级别的计算不是必需的,如果滥用可能会导致问题。

【问题讨论】:

    标签: prisma prisma-graphql


    【解决方案1】:

    我发现这是我在我的一个问题回复中要解决的主题,因为我认为这是在那里被问到的。我现在意识到我一定是把它和这个在后面的一个标签中打开的混淆了。

    https://github.com/maticzav/graphql-shield/issues/113#issuecomment-423766569

    我认为我的回复的第二部分最关心您。我希望你觉得这对你有帮助! ?

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题,现在我正在通过使用 prisma 客户端向 prisma 发出请求来解决它。 Prisma 客户端每次只查询一层深度,因此您也可以在嵌套查询中完全控制解析器。 见https://stackoverflow.com/a/53703140/1391050

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-14
        • 2013-09-19
        • 2022-10-30
        • 1970-01-01
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多