forked from wangziqi/gongxue-base
feat: scaffold supabase multi-tenant backend
This commit is contained in:
65
docs/refactor/data-governance.md
Normal file
65
docs/refactor/data-governance.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# 数据治理与安全规范
|
||||
|
||||
这次重构不按 PocketBase 旧字段原样搬迁。旧集合只作为历史输入源,正式业务表按商用 SaaS 规范重新建模。
|
||||
|
||||
## 默认原则
|
||||
|
||||
- 旧数据先进入 `pb_raw_records`,且默认脱敏。
|
||||
- 密钥、token、session、private key、AppSecret、支付密钥不得进入 `public` schema。
|
||||
- 私密配置进入 `app_private.tenant_secrets`,生产环境再接云厂商 KMS/Vault。
|
||||
- `settings` 不再作为业务表使用,必须拆成公开配置、支付账户、短信配置、OAuth 配置、存储配置。
|
||||
- `users` 不再作为万能表,拆成用户、身份、租户成员、学生资料、权益、学习记录。
|
||||
- `users.isSvip`、`svipExpiry`、`svipRegions` 不作为新系统权限源,统一迁移为 `entitlements`。
|
||||
- `users.stats.favorites/wrongBook` 不继续留在 JSON 中,统一迁移为收藏表和错题表。
|
||||
- `crm_config`、支付、短信、OAuth、对象存储等配置不得在 `public` schema 中保存明文密钥;公共表只保留可展示配置或 secret 引用。
|
||||
- 导入后的上线闸门是 `npm run pb:import:validate`:有 `FAIL` 不上线,`WARN` 必须由业务确认并记录。
|
||||
|
||||
## 禁止直接复制的字段类型
|
||||
|
||||
字段名包含以下关键词时默认视为敏感:
|
||||
|
||||
```text
|
||||
password
|
||||
token
|
||||
secret
|
||||
privateKey
|
||||
sessionKey
|
||||
accessKey
|
||||
appKey
|
||||
apiKey
|
||||
openid
|
||||
unionid
|
||||
aesKey
|
||||
notifyToken
|
||||
```
|
||||
|
||||
这些字段默认在导入原始区时写入 `[REDACTED]`。如果确实需要迁移到私有表,必须显式设置:
|
||||
|
||||
```bash
|
||||
IMPORT_SECRET_VALUES=true npm run import:json
|
||||
```
|
||||
|
||||
并且只能进入 `app_private.tenant_secrets`。
|
||||
|
||||
## 导入质量报告
|
||||
|
||||
导入时会写入 `pb_import_issues`,用于记录:
|
||||
|
||||
- 敏感字段来源
|
||||
- 旧 JSON 字段需要拆表
|
||||
- `settings` 大杂烩配置风险
|
||||
- `users` 会员状态需要转权益
|
||||
|
||||
查看旧 schema 风险:
|
||||
|
||||
```bash
|
||||
npm run pb:schema:risk
|
||||
```
|
||||
|
||||
## 后续硬性验收
|
||||
|
||||
- RLS 覆盖所有带 `tenant_id` 的表。
|
||||
- 租户间数据隔离测试必须自动化。
|
||||
- 支付 webhook 必须幂等。
|
||||
- 订单金额、支付流水、权益开通必须可审计。
|
||||
- 管理员操作必须写审计日志。
|
||||
Reference in New Issue
Block a user