1.5 KiB
1.5 KiB
lesson_id, lesson_state, owner, reviewer, last_reviewed, reviewed_revision, source_issues, keywords
| lesson_id | lesson_state | owner | reviewer | last_reviewed | reviewed_revision | source_issues | keywords | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LESSON-20260928-standard-role-reseed | validated | Cursor | Cursor(自审) | 2026-09-28 | 4ba60c2c9d |
|
|
代码硬编码的标准角色必须可自愈且不可删
- 触发条件:注册、管理员建号或种子用户写入固定
role_id,而该角色只在历史 goose 种子里出现一次。 - 机制与来源:
Register固定写role-guest。00015 仅role-admin为is_system。角色一旦被删,goose 不重跑、BootstrapIAM只补用户,user_role_bindings外键失败被脱敏成 INTERNAL。证据日期 2026-09-28,见 任务。 - 开发检查:硬编码角色 id 须在迁移里
ON CONFLICT DO UPDATE补种,并标is_system。用户名一类唯一冲突返回领域错误,不要包进insert user:这类会被当成 500 的前缀。 - 验证方式:缺角色的库补种后注册返回 200;重复用户名返回 400 且
error为「用户名已存在」。 - 适用边界:适用于 IAM 标准角色。业务自定义角色仍允许删除(无人引用时)。
- 防护落实:migration 00077 +
DeleteRole既有系统角色拒绝。未新增 lint。 - 修订与失效:若注册不再绑定
role-guest,本条对那个写入点失效,保留历史。