feat(db): A5 审计表分区、append-only 与种子
audit_logs 按月 RANGE 分区、复合主键与 6 组索引;ensure_partitions 幂等建分区;UPDATE/DELETE/TRUNCATE 触发器与 lingxi_app 最小权限;audit_export_jobs;种子新增 3 项配置与 6 条演示审计。
This commit is contained in:
1 parent
408dc5e81b
commit
6215f204ce
6 files changed
+441
-4
No files matched your search
+6
-4
@@ -1,6 +1,6 @@
|
||||
# 种子数据状态(A2)
|
||||
# 种子数据状态(A5)
|
||||
|
||||
A0 只 seed「已建表」的 `system_configs`;A1 补齐组织、账号与角色种子;A2 补齐权限点目录、角色权限映射与六类数据范围种子。全部种子按业务唯一键 upsert,**幂等**:重复执行不重复插入,也不覆盖已存在的密码 / 人工调整值。
|
||||
A0 只 seed「已建表」的 `system_configs`;A1 补齐组织、账号与角色种子;A2 补齐权限点目录、角色权限映射与六类数据范围种子;A3 补客户 / 行业;A4 补数据字典;A5 补审计演示数据(append-only,存在即跳过)。全部种子按业务唯一键 upsert / 存在即跳过,**幂等**:重复执行不重复插入,也不覆盖已存在的密码 / 人工调整值。
|
||||
|
||||
> 权限点编码唯一事实源是 `packages/shared/src/permissions.ts`(30 个 / 10 模块 / 6 个特殊权限 / 3 对 SoD),`seed.ts` 直接引用 shared 源码目录,不在本文件复制编码字符串。
|
||||
|
||||
@@ -8,7 +8,7 @@ A0 只 seed「已建表」的 `system_configs`;A1 补齐组织、账号与角
|
||||
|
||||
| 数据 | 来源 | 幂等键 | 说明 |
|
||||
| ------------------------------ | ---------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 平台系统配置 26 项 | `system_configs` | `config_key` | 定义唯一事实源为 `packages/shared/src/config/system-configs.ts`:基础信息 2、命名规则 5、导出与归档 4、通知开关 4、阈值与上限 5、业务阈值 6;A0 的 7 项继续保留,A4 补齐其余配置;重复执行不覆盖人工调整值 / 版本 |
|
||||
| 平台系统配置 29 项 | `system_configs` | `config_key` | 定义唯一事实源为 `packages/shared/src/config/system-configs.ts`:基础信息 2、命名规则 5、导出与归档 4、通知开关 4、阈值与上限 5、业务阈值 6、审计与日志 3(A5:保留期 / 导出上限 / 日志平台地址);A0 的 7 项继续保留;重复执行不覆盖人工调整值 / 版本 |
|
||||
| 部门 / 小组 9 个(两级) | `departments` | `code` | 内容生产中心(素材一组 / 素材二组 / 设计组)、交付中心(客户成功组)、平台技术部(AI 工程组 / 平台运维组);一级部门负责人取 `leader_account`,用户种子之后回填 `leader_user_id` |
|
||||
| 权限点目录 30 个 | `permissions` | `code`(只增不删) | 10 个模块(script / material / asset / delivery / customer / customer_group / identity / industry / platform / audit);启动时由 `PermissionCatalogService` 幂等 upsert,seed 同步一次 |
|
||||
| 角色 10 个 + 角色权限点 | `roles` / `role_permissions` | 角色 `code`;权限映射先清后建 | 与 `design/a2-ui-v1/brief.md` §4 对齐:超级管理员(隐式全集,映射 24 普通 + 6 特殊)、平台管理员 12+1(`audit:read`)、素材运营 9、设计师 4、文案策划 2、审核员 4、AI 工程师 3+1(`ai:configure`)、客户负责人 5、行业配置 4、审核主管 5(停用);非超管角色合计 50 条映射,特殊授予共 8 项;新建角色仍默认全空、特殊权限单独授予 |
|
||||
@@ -16,6 +16,7 @@ A0 只 seed「已建表」的 `system_configs`;A1 补齐组织、账号与角
|
||||
| 用户 11 个(超管 1 + 示例 10) | `users` / `user_roles` | `account`;用户角色先清后建 | 超管 `admin`,示例用户与 A1 原型口径一致(陈默、林清、周岸、赵一诺、高岑、苏禾、沈知远、江岚、唐嘉、何岸);唐嘉 / 何岸为停用态,用于「停用即时失效」联调 |
|
||||
| 用户初始密码 | `users.password_hash` | — | 统一 `lingxi2026`(Argon2id),`must_change_password=true`:首登强制改密 |
|
||||
| A4 数据字典 13 类 / 96 条 | `dict_types` / `dict_items` | 类型 `code`;条目 `(type, code, industry)` | 13 类:平台与规格、光影与风格、时长档、钩子类型、景别、脚本方向、情绪与风格、素材形态、警示语类型、禁用词库、失败原因、淘汰理由、人群标签;4 分组;行业作用域使用 A3 的「电商 / 服饰鞋包 / 金融 / 信贷」等行业 ID;内置类型不可删除,条目编码不可改 |
|
||||
| A5 审计演示 6 条 | `audit_logs` | 固定 ULID(存在即跳过) | 登录、客户编辑、角色权限变更、系统配置保存、审计查看、审计导出各 1 条;actor=admin,时间取当前时间附近(保证落在已建分区);**append-only 表不能 upsert / 删除**,故存在即跳过;集成测试使用独立时间窗与动作筛选,不受影响 |
|
||||
|
||||
## 登录账号(本地联调)
|
||||
|
||||
@@ -54,10 +55,11 @@ pnpm db:seed # 只跑种子;幂等,不覆盖已有密码
|
||||
- A3 起新增客户与行业种子:两级行业「电商(服饰鞋包 / 美妆个护)」「金融(信贷)」、客户「花间集 / 素研」、客户组「电商核心组」、4 条客户级字段(1 条待审批);按业务唯一键幂等写入,不覆盖人工调整。
|
||||
- 字典(A4)、行业包(B0)仍留待后续批次建表,不在本种子内。
|
||||
- `data_scopes` 只存角色声明的范围与授权对象;A3 起由真实 `CustomerDirectory` 在请求期解析(客户负责人 / 客户组 / 部门 / 创建人),种子不写解析结果。
|
||||
- 审计 `audit_logs` 按月分区,迁移与 `audit_logs_ensure_partitions(13)` 保证当月 ~ +13 月分区存在;种子演示数据只用当前时间,避免写入不存在分区的历史月份。
|
||||
- 原有的 `Q-A0-01`(种子验收与建表顺序冲突)已随 A1 建表解除。
|
||||
|
||||
## 已知限制
|
||||
|
||||
- 客户转交已由 A3 client 模块落地(`/customers/{id}/transfer` 与 `/users/{id}/transfer-customers`),不再返回占位错误;客户组范围可指向种子客户组。
|
||||
- 审计表属 A5,`@Audit` 当前写结构化日志(含前后值与影响用户数);A5 落库后在此扩展日志 + 审计表双写。
|
||||
- A5 起 `@Audit` 已落库:Pino 结构化日志与 `audit_logs` 双写(成功 / 失败都写,写入失败只记 Pino error);审计表 append-only,DB 触发器拒绝 UPDATE / DELETE / TRUNCATE。
|
||||
- `outbox_events` 已写入 `role.permissions.changed` 占位事件(角色新建 / 更新 / 停用 / 删除),通知投递随 A5 / 任务中心接入。
|
||||
Reference in new issue
Block a user