CRUD 与关系
这节要解决什么
会用 Prisma 做增删改查,并理解「按 userId 过滤」为什么重要。
先用大白话
CRUD = Create / Read / Update / Delete。
有了用户之后,书签表不能只存标题和链接,还要存 属于谁(userId)。
查询列表时带上「当前登录用户 id」,更新/删除前先确认「这条是不是他的」。
这是实战里最基本的数据权限,比先上复杂 RBAC 更重要。
对着项目看
在 bookmarks.service.ts 一类文件中,典型写法:
// 列表:只看自己的
prisma.bookmark.findMany({ where: { userId } })
// 创建:带上主人
prisma.bookmark.create({
data: { title, url, userId },
})
// 更新前先找:id + userId 都匹配才行
prisma.bookmark.findFirst({ where: { id, userId } })如果只按 id 删、不校验 userId,用户 A 猜到 id 就可能删掉用户 B 的数据 —— 这是真实漏洞。
关系怎么读
model User {
bookmarks Bookmark[]
}
model Bookmark {
user User @relation(fields: [userId], references: [id])
userId Int
}意思是:书签属于用户;用户拥有很多书签。
动手
npm run start:dev保持运行- 注册两个用户,各建几条书签
- 用
npx prisma studio打开,看userId是否不同 - 确认用户 A 的 token 列不出用户 B 的书签
验收清单
- 能写出(或读懂)findMany / create / update / delete
- 明白所有书签操作都要带着 userId 条件
- 会用 Prisma Studio 检查数据
下一节 → 练习与验收.md