[英]Creating deeply nested object in Prisma securely
我正在使用具有以下数据结构的 Prisma 和 Nextjs,并使用 Next-Auth 进行身份验证。
user
|-->profile
|-->log
|-->sublog
现在,CRUD 通过 Nextjs 上的 API 路由发送到数据库。 我想通过 API 安全地写入sublog
。
所以当我写这篇文章时,它是开放式的:
const sublog = await prisma.sublog.create({
data: {
name: req.body.name,
content: req.body.content,
log: {
connect: {
id: req.body.logId,
}
}
}
})
我可以从前端和后端访问用户会话以获取用户 ID。 但是我不确定如何使表单提交安全,只有拥有log
的用户才能被允许提交sublog
。
关于如何在深度嵌套时安全地提交内容的任何想法?
PS 请注意,我可以打开和关闭任何在前端编辑/删除数据的组件——但这只是在前端,我想在 API 上保护它,这样即使客户端能够以某种方式访问表单中的表单不属于他们的log
,它仍然会从 API 推送错误,因为客户端不属于那里。
在允许执行prisma.sublog.create
之前,您需要进行 prisma 查询来检查谁拥有log
。 Prisma 与所有权的概念无关——您需要自己添加并检查该逻辑。
const fullLog = await prisma.log.findUnique({
select: { // don't know what your model looks like, just guessing
id: true,
profile: {
select: {
userId: true
}
}
},
where: {
id: req.body.logId
}
});
// currentUserId = however you get the current user's id
if (fullLog && fullLog.profile.userId !== currentUserId) {
// throw an error
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.