2

现在我正在使用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)
  }
}

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

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

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

4

2 回答 2

0

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

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

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

于 2018-10-10T13:11:55.930 回答
0

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

于 2018-12-30T16:48:52.610 回答