feat(data): 业务数据与系统数据分离的导入导出
数据迁移不再整体替换 trade.db —— 那条路会把账号、权限组、组织、设置(含大模型密钥)、 登录会话与审计日志一起搬到目标部署。改为按类别搬运业务数据,系统数据永远是目标部署自己那份。 - backend/lib/dataTransfer:表目录(30 张业务表,依赖顺序)、gzip JSONL 数据包(每表 sha256)、导入内核 - 归属统一给导入人;冲突跳过不覆盖;父记录按 __refs 自然键快照补壳 - 流水表(price_history)按整行内容判重:用 (sku, changed_at) 当键实测 643 行丢 186 行 - 预览在库副本上真跑一遍导入,报告与真导同源;导入前 VACUUM INTO 备份,单事务写入 - 新权限点 data.transfer(仅超管组),导出/导入均写审计 - 前端「数据迁移」页:按类别勾选导出、上传后预览逐表明细、确认导入;移除设置里的静态占位「数据交换」 - 测试:单测 7 项(含目录外键顺序、BLOB、重复导入、包被改坏)、API 端到端 1 项(两个真实实例互传) - 用真实库副本彩排:3854 行 0 失败,29 张业务表行数全部一致,包 1.22 MB
This commit is contained in:
@@ -56,7 +56,10 @@ const PERMISSIONS = [
|
||||
{ key: 'user.manage', label: '用户管理', group: '系统管理' },
|
||||
{ key: 'perm.manage', label: '权限组管理', group: '系统管理' },
|
||||
{ key: 'ai.manage', label: '智能配置(大模型接入与用途分配)', group: '系统管理' },
|
||||
{ key: 'audit.view', label: '审计日志', group: '系统管理' }
|
||||
{ key: 'audit.view', label: '审计日志', group: '系统管理' },
|
||||
/* 业务数据的导入导出:一次能把几千条商品/客户写进库里,也能把整库业务数据带走,
|
||||
所以只给超级管理员组。包内永远不会包含用户、权限、组织、设置与会话。 */
|
||||
{ key: 'data.transfer', label: '数据导入导出(业务数据迁移)', group: '系统管理' }
|
||||
]
|
||||
|
||||
const PERMISSION_KEYS = PERMISSIONS.map(item => item.key)
|
||||
@@ -91,7 +94,7 @@ const DEFAULT_PERMISSION_GROUPS = [
|
||||
`branding.manage` 反过来说:它**靠** .manage 后缀被自动排除,
|
||||
销售经理永远拿不到改公司信息的权限(Wayne 口径:只有高管能改)。 */
|
||||
permissions: PERMISSION_KEYS.filter(key =>
|
||||
!key.endsWith('.manage') && key !== 'audit.view' && key !== 'customer.view_all'),
|
||||
!key.endsWith('.manage') && !['audit.view', 'customer.view_all', 'data.transfer'].includes(key)),
|
||||
roles: ['sales_manager']
|
||||
},
|
||||
{
|
||||
@@ -119,7 +122,7 @@ const DEFAULT_PERMISSION_GROUPS = [
|
||||
user.manage / perm.manage 是账号治理权,ai.manage 会看到所有模型密钥,
|
||||
audit.view 能看到全公司的操作轨迹 —— Wayne 口径是「系统日志仅系统管理员可见」。 */
|
||||
permissions: PERMISSION_KEYS.filter(key =>
|
||||
!['user.manage', 'perm.manage', 'ai.manage', 'audit.view'].includes(key)),
|
||||
!['user.manage', 'perm.manage', 'ai.manage', 'audit.view', 'data.transfer'].includes(key)),
|
||||
roles: ['chairman', 'general_manager']
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user