feat: 多租户账号体系 + 前台收藏按钮
- 新增 users 表(user_id 数据隔离,bcrypt 密码) - 认证: 注册/登录(用户名+密码)/会话绑定用户, 首个用户成为管理员并接管旧数据 - 数据隔离: 笔记/分类/标签/回收站/版本/草稿/图谱/FTS 全部按用户隔离 - 前台: 登录/注册弹窗, 登录后★收藏自己的笔记, 游客只读公开笔记 - 后台: 用户名+密码登录, 每人管理自己的工作区, 越权访问返回404 - 冒烟测试重构+新增多租户隔离用例(78/78)
This commit is contained in:
@@ -716,3 +716,28 @@ await fetch('/api/notes', {
|
||||
- 可添加到主屏幕离线使用
|
||||
|
||||
> 注:FTS5 需用 `-tags=sqlite_fts5` 编译;`note_search` 虚拟表由 Go 代码维护(手动管理而非 SQL 触发器),保证中文分词正确。
|
||||
|
||||
---
|
||||
|
||||
## v4 多租户账号体系
|
||||
|
||||
### 认证(用户名 + 密码,bcrypt)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| POST | `/api/auth/register` | 注册 `{username,password,display_name}`;**首个用户自动成为 admin 并接管历史遗留(user_id=0)笔记** |
|
||||
| POST | `/api/auth/login` | 登录 `{username,password}`,写入 `note_token` cookie |
|
||||
| POST | `/api/auth/logout` | 登出 |
|
||||
| GET | `/api/auth/me` | 当前登录用户信息(游客返回 null) |
|
||||
|
||||
### 多租户数据隔离
|
||||
|
||||
- 每篇笔记归属 `user_id`;所有查询(笔记/分类/标签/回收站/版本/草稿/图谱/FTS 搜索)均按当前用户隔离。
|
||||
- **前台 `/api`**:登录用户看自己的笔记(前台可★收藏自己的笔记);游客只读所有用户的公开无密码笔记。
|
||||
- **后台 `/admin/api`**:需登录,每个用户只能管理自己的笔记(越权访问他人笔记返回 404)。
|
||||
- 旧账号固定密码登录已移除;会话与用户绑定,重启后需重新登录。
|
||||
|
||||
### 安全
|
||||
|
||||
- `note_token` 会话 cookie:HttpOnly + SameSite=Lax(防 CSRF),随机 32 字节 token,7 天过期,服务端内存校验绑定用户。
|
||||
- 密码 bcrypt(cost 10),兼容旧 SHA-256 自动升级。
|
||||
|
||||
Reference in New Issue
Block a user