- 新增 DataPerm 模块(配置 CRUD、模板、字段脱敏、变更/访问日志 API)及 SQL 脚本 - 订单列表/导出接入 EffectiveScopeBuilder 五维数据权限过滤 - 修复集成测试 JSON 反序列化与 RBAC 用户名解析;新增 DataPerm API 集成测试 Co-authored-by: Cursor <cursoragent@cursor.com>
63 lines
3.0 KiB
SQL
63 lines
3.0 KiB
SQL
-- OMS 业务表 — 数据权限 P1 扩展字段
|
||
-- 设计文档:E:\oms0414\docs\数据权限设计.md §4.8
|
||
-- 可重复执行(information_schema 判断)
|
||
|
||
-- t_customer.OrganizationId
|
||
SET @db = DATABASE();
|
||
SET @sql = IF(
|
||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_customer' AND COLUMN_NAME = 'OrganizationId') = 0,
|
||
'ALTER TABLE `t_customer` ADD COLUMN `OrganizationId` CHAR(36) NULL COMMENT ''归属销售组织 FK organization.Id'' AFTER `CustomerGroup`',
|
||
'SELECT ''skip t_customer.OrganizationId'' AS msg'
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql = IF(
|
||
(SELECT COUNT(*) FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_customer' AND INDEX_NAME = 'idx_cus_organization') = 0,
|
||
'ALTER TABLE `t_customer` ADD KEY `idx_cus_organization` (`OrganizationId`)',
|
||
'SELECT ''skip idx_cus_organization'' AS msg'
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- t_order.OrganizationId + SecretLevel
|
||
SET @sql = IF(
|
||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND COLUMN_NAME = 'OrganizationId') = 0,
|
||
'ALTER TABLE `t_order` ADD COLUMN `OrganizationId` CHAR(36) NULL COMMENT ''数据归属组织'' AFTER `CustomerId`',
|
||
'SELECT ''skip t_order.OrganizationId'' AS msg'
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql = IF(
|
||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND COLUMN_NAME = 'SecretLevel') = 0,
|
||
'ALTER TABLE `t_order` ADD COLUMN `SecretLevel` TINYINT NOT NULL DEFAULT 2 COMMENT ''数据密级 1-4'' AFTER `OrganizationId`',
|
||
'SELECT ''skip t_order.SecretLevel'' AS msg'
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql = IF(
|
||
(SELECT COUNT(*) FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND INDEX_NAME = 'idx_ord_org_secret_ctime') = 0,
|
||
'ALTER TABLE `t_order` ADD KEY `idx_ord_org_secret_ctime` (`OrganizationId`, `SecretLevel`, `CreateTime`)',
|
||
'SELECT ''skip idx_ord_org_secret_ctime'' AS msg'
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- t_recharge_record.SecretLevel(P2 预置,可跳过)
|
||
SET @sql = IF(
|
||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_recharge_record' AND COLUMN_NAME = 'SecretLevel') = 0,
|
||
'ALTER TABLE `t_recharge_record` ADD COLUMN `SecretLevel` TINYINT NOT NULL DEFAULT 3 COMMENT ''数据密级 1-4'' AFTER `CustomerId`',
|
||
'SELECT ''skip t_recharge_record.SecretLevel'' AS msg'
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- 历史订单 OrganizationId 回填:取自客户归属组织(有则更新)
|
||
UPDATE `t_order` o
|
||
INNER JOIN `t_customer` c ON c.`Id` = o.`CustomerId` AND c.`IsDeleted` = 0
|
||
SET o.`OrganizationId` = c.`OrganizationId`
|
||
WHERE o.`OrganizationId` IS NULL
|
||
AND c.`OrganizationId` IS NOT NULL;
|