现在我正在使用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 之前对其进行处理。你们有没有人解决过这个问题?当然,可以在请求解决后对其进行过滤,但是这种级别的计算不是必需的,如果滥用可能会导致问题。