使用 Prisma 检查对象所有权
Posted
技术标签:
【中文标题】使用 Prisma 检查对象所有权【英文标题】:Check for object ownership with Prisma 【发布时间】:2021-08-08 01:25:28 【问题描述】:我刚开始使用 Prisma。我不清楚的一个方面是检查用户是否对对象具有权限的正确方法。假设我们有 Book
和 Author
模型。每本书都有一个作者(一对多)。只有作者有权删除图书。
执行此操作的简单方法是:
prismaClient.book.deleteMany(
id: bookId, <-- id is known
author:
id: userId <-- id is known
)
但是这种方式很难向用户显示UnauthorizedError
。相反,响应将是 500
状态代码,因为我们无法知道查询失败的确切原因。
另一种方法是先查询图书并检查图书实例的作者,这会导致再查询一次。
在 Prisma 中有这方面的最佳实践吗?
【问题讨论】:
【参考方案1】:假设您使用的是 PostgreSQL,最好的方法是使用行级安全性 (RLS) - 但不幸的是,Prisma 尚未正式支持它。 这里有关于这个主题的讨论 https://github.com/prisma/prisma/issues/5128
对于目前的情况,我认为最好使用附加查询并为用户提供信息反馈,而不是使用您建议的其他方法而不知道为什么没有删除它。
最终,您可以根据自己的用例来决定 - 了解失败的原因对您来说是否重要。
【讨论】:
以上是关于使用 Prisma 检查对象所有权的主要内容,如果未能解决你的问题,请参考以下文章
仅使用 prisma 和 nexus 检索所有者数据的可能性