现在,我正在使用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(...)
。你们有没有解决这个问题?当然,可以在解决请求后过滤该请求,但是该级别的计算不是必需的,并且如果滥用该请求会引起问题。
答案 0 :(得分:0)
我发现这是我在一个问题回复中要解决的主题,因为我以为有人问过。现在,我意识到我一定对它感到困惑,因为可以在后面的一个选项卡中打开它。
https://github.com/maticzav/graphql-shield/issues/113#issuecomment-423766569
我认为答复的第二部分最关注您。我希望你觉得这对你有帮助!
答案 1 :(得分:0)
我遇到了完全相同的问题,现在我通过使用prisma客户端向prisma发出请求来解决它。 Prisma客户端每次只查询一个深层次的内容,因此您也可以在嵌套查询中完全控制解析器。 参见https://stackoverflow.com/a/53703140/1391050