使用 Prisma 检查对象所有权

Posted

技术标签:

【中文标题】使用 Prisma 检查对象所有权【英文标题】:Check for object ownership with Prisma 【发布时间】:2021-08-08 01:25:28 【问题描述】:

我刚开始使用 Prisma。我不清楚的一个方面是检查用户是否对对象具有权限的正确方法。假设我们有 BookAuthor 模型。每本书都有一个作者(一对多)。只有作者有权删除图书。

执行此操作的简单方法是:

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:我怎样才能让所有孩子都处于某种状态?

仅使用 prisma 和 nexus 检索所有者数据的可能性

Prisma:所有迁移都已应用

Prisma Client 在电子打包所有内容后找不到查询引擎

Prisma 不返回创建的相关记录

从数据库中删除所有表后,如何将 prisma 重新部署到数据库