背景:A4 需要字典三层合并、配置版本与命名规则的共享契约。\n改动:新增 dict/config 契约、system-configs 定义与校验、命名模板解析;新增 dict_types/dict_items/system_config_versions 迁移与 13 类/96 条字典、26 项配置种子。\n影响面:shared 新增导出;prisma 新增表与迁移;客户基础字段 DTO 硬上界调整为 50(实际生效上限仍由配置动态校验)。\n回滚:回滚本提交并保留新增表(不删数据)。\n验证:shared typecheck/test 147;seed 幂等;prisma migrate dev 已应用。
9.3 KiB
9.3 KiB
种子数据状态(A2)
A0 只 seed「已建表」的 system_configs;A1 补齐组织、账号与角色种子;A2 补齐权限点目录、角色权限映射与六类数据范围种子。全部种子按业务唯一键 upsert,幂等:重复执行不重复插入,也不覆盖已存在的密码 / 人工调整值。
权限点编码唯一事实源是
packages/shared/src/permissions.ts(30 个 / 10 模块 / 6 个特殊权限 / 3 对 SoD),seed.ts直接引用 shared 源码目录,不在本文件复制编码字符串。
已 seed(prisma/seed.ts)
| 数据 | 来源 | 幂等键 | 说明 |
|---|---|---|---|
| 平台系统配置 26 项 | system_configs |
config_key |
定义唯一事实源为 packages/shared/src/config/system-configs.ts:基础信息 2、命名规则 5、导出与归档 4、通知开关 4、阈值与上限 5、业务阈值 6;A0 的 7 项继续保留,A4 补齐其余配置;重复执行不覆盖人工调整值 / 版本 |
| 部门 / 小组 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 项;新建角色仍默认全空、特殊权限单独授予 |
| 角色数据范围 | data_scopes |
角色 code;范围先清后建 |
一个角色只允许一种范围类型:超管 / 平台管理员 / AI 工程师 / 行业配置 = all;素材运营 / 设计师 = owned_customers;文案策划 = department;审核员 / 审核主管 = department_and_children;客户负责人 = customer_groups(A3 前无客户组,保留一行 target_id = NULL 以固定范围类型,不降级为最小权限) |
| 用户 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;内置类型不可删除,条目编码不可改 |
登录账号(本地联调)
| 账号 | 姓名 | 角色 | 部门 / 小组 | 状态 |
|---|---|---|---|---|
admin |
灵犀管理员 | 超级管理员 | 平台技术部(直属) | 在职 |
chen.mo |
陈默 | 素材运营、客户负责人 | 内容生产中心 / 素材一组 | 在职 |
lin.qing |
林清 | 设计师 | 内容生产中心 / 设计组 | 在职 |
zhou.an |
周岸 | 文案策划 | 内容生产中心 / 素材二组 | 在职 |
zhao.yinuo |
赵一诺 | 审核员 | 内容生产中心 / 素材二组 | 在职 |
gao.cen |
高岑 | 客户负责人 | 交付中心 / 客户成功组 | 在职 |
su.he |
苏禾 | AI 工程师 | 平台技术部 / AI 工程组 | 在职 |
shen.zhiyuan |
沈知远 | 超级管理员 | 平台技术部(直属) | 在职 |
jiang.lan |
江岚 | 平台管理员 | 平台技术部 / 平台运维组 | 在职 |
tang.jia |
唐嘉 | 素材运营 | 内容生产中心 / 素材一组 | 停用 |
he.an |
何岸 | 客户负责人 | 交付中心 / 客户成功组 | 停用 |
登录账号按共享契约
accountSchema不含@(邮箱本地部分 / 工号风格);邮箱由种子自动生成账号@lingxi.cn。
使用
pnpm db:init # 推荐:migrate deploy + 幂等 seed(不重置数据、不覆盖已有密码)
pnpm db:migrate # 开发期新增迁移时使用(prisma migrate dev)
pnpm db:seed # 只跑种子;幂等,不覆盖已有密码
# 本地清库:pnpm db:reset(会重建全部表并重新 seed,账号回到初始密码 + 首登改密标记)
密码何时会被重置:只有执行
db:reset/prisma migrate reset/ 手工删库或重建 PG 数据卷时,种子账号才会回到lingxi2026且must_change_password=true。dev.sh、pnpm dev、pnpm db:init、pnpm db:seed都不会覆盖已有用户密码;must_change_password在用户成功改密后写为false,之后登录不再要求改密。
与 A1 / A2 遗留的关系
- A1 记录的角色 / 用户种子已延续;A2 在其上补齐权限点目录、特殊权限口径(默认关闭、显式授予)与六类数据范围。
- 角色权限数按原型
design/a2-ui-v1/brief.md对齐(12/9/4/2/4/3/5/4/5,特殊授予 8 项);用户仍为 A1 的 11 个示例账号,原型「绑定用户 28 名」属 UI 示例数据,未扩种用户。 - A3 起新增客户与行业种子:两级行业「电商(服饰鞋包 / 美妆个护)」「金融(信贷)」、客户「花间集 / 素研」、客户组「电商核心组」、4 条客户级字段(1 条待审批);按业务唯一键幂等写入,不覆盖人工调整。
- 字典(A4)、行业包(B0)仍留待后续批次建表,不在本种子内。
data_scopes只存角色声明的范围与授权对象;A3 起由真实CustomerDirectory在请求期解析(客户负责人 / 客户组 / 部门 / 创建人),种子不写解析结果。- 原有的
Q-A0-01(种子验收与建表顺序冲突)已随 A1 建表解除。
已知限制
- 客户转交已由 A3 client 模块落地(
/customers/{id}/transfer与/users/{id}/transfer-customers),不再返回占位错误;客户组范围可指向种子客户组。 - 审计表属 A5,
@Audit当前写结构化日志(含前后值与影响用户数);A5 落库后在此扩展日志 + 审计表双写。 outbox_events已写入role.permissions.changed占位事件(角色新建 / 更新 / 停用 / 删除),通知投递随 A5 / 任务中心接入。