【发布时间】: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