This commit is contained in:
2026-08-20 13:34:29 +08:00
parent 3e517ee74e
commit d3183d8f2c
5 changed files with 97 additions and 40 deletions
@@ -9196,16 +9196,22 @@ CREATE PROCEDURE assert_ocean_booking_permission_ids_available()
BEGIN
IF EXISTS (
SELECT 1 FROM iam_permission
WHERE (id BETWEEN 5102140 AND 5102149
AND permission_code <> CASE id
WHEN 5102140 THEN 'platform:firstleg:ocean-booking:list'
WHEN 5102141 THEN 'platform:firstleg:ocean-booking:list'
WHEN 5102142 THEN 'platform:firstleg:ocean-booking:create'
WHEN 5102146 THEN 'platform:firstleg:ocean-booking:release'
WHEN 5102147 THEN 'platform:firstleg:ocean-booking:edit'
WHEN 5102148 THEN 'platform:firstleg:ocean-booking:delete'
WHEN 5102149 THEN 'platform:firstleg:ocean-booking:allocate'
END)
WHERE (id = 5102140 AND permission_code <> 'platform:firstleg:ocean-booking:list')
OR (id = 5102141 AND permission_code NOT IN (
'platform:firstleg:ocean-booking:list',
'platform:firstleg:ocean-booking:view'))
OR (id = 5102142 AND permission_code <> 'platform:firstleg:ocean-booking:create')
OR (id = 5102143 AND permission_code <> 'platform:firstleg:ocean-booking:edit')
OR (id = 5102144 AND permission_code <> 'platform:firstleg:ocean-booking:submit')
OR (id = 5102145 AND permission_code <> 'platform:firstleg:ocean-booking:confirm')
OR (id = 5102146 AND permission_code <> 'platform:firstleg:ocean-booking:release')
OR (id = 5102147 AND permission_code NOT IN (
'platform:firstleg:ocean-booking:cancel',
'platform:firstleg:ocean-booking:edit'))
OR (id = 5102148 AND permission_code NOT IN (
'platform:firstleg:ocean-booking:change',
'platform:firstleg:ocean-booking:delete'))
OR (id = 5102149 AND permission_code <> 'platform:firstleg:ocean-booking:allocate')
OR (permission_code LIKE 'platform:firstleg:ocean-booking:%'
AND (tenant_id <> 0 OR app_code <> 'PLATFORM' OR id NOT BETWEEN 5102140 AND 5102149))
) THEN
@@ -9217,6 +9223,10 @@ DELIMITER ;
CALL assert_ocean_booking_permission_ids_available();
DROP PROCEDURE IF EXISTS assert_ocean_booking_permission_ids_available;
UPDATE iam_permission
SET permission_code='platform:firstleg:ocean-booking:view',status='INACTIVE',deleted=1
WHERE id=5102141 AND permission_code='platform:firstleg:ocean-booking:list';
INSERT INTO iam_permission
(id,tenant_id,app_code,permission_type,parent_id,permission_code,permission_name,
route_path,http_method,sort_no,status,built_in,deleted)
@@ -9236,6 +9246,9 @@ SELECT role.id,permission.id,0 FROM iam_role role JOIN iam_permission permission
ON permission.tenant_id=0 AND permission.permission_code LIKE 'platform:firstleg:ocean-booking:%'
WHERE role.tenant_id=0 AND role.role_code IN ('PLATFORM_ADMIN','ORDER_OPERATOR');
DELETE rp FROM iam_role_permission rp JOIN iam_permission p ON p.tenant_id=rp.tenant_id AND p.id=rp.permission_id
WHERE p.id=5102141;
UPDATE iam_permission SET status='INACTIVE',deleted=1 WHERE id=5102141;
DELETE rp FROM iam_role_permission rp WHERE rp.permission_id IN (5102143,5102144,5102145);
DELETE FROM iam_permission WHERE id IN (5102143,5102144,5102145);
@@ -9321,14 +9334,13 @@ CREATE PROCEDURE assert_truck_appointment_permission_ids_available()
BEGIN
IF EXISTS (
SELECT 1 FROM iam_permission
WHERE (id BETWEEN 5102150 AND 5102154
AND permission_code <> CASE id
WHEN 5102150 THEN 'platform:firstleg:truck-appointment:list'
WHEN 5102151 THEN 'platform:firstleg:truck-appointment:list'
WHEN 5102152 THEN 'platform:firstleg:truck-appointment:create'
WHEN 5102153 THEN 'platform:firstleg:truck-appointment:edit'
WHEN 5102154 THEN 'platform:firstleg:truck-appointment:operate'
END)
WHERE (id = 5102150 AND permission_code <> 'platform:firstleg:truck-appointment:list')
OR (id = 5102151 AND permission_code NOT IN (
'platform:firstleg:truck-appointment:list',
'platform:firstleg:truck-appointment:view'))
OR (id = 5102152 AND permission_code <> 'platform:firstleg:truck-appointment:create')
OR (id = 5102153 AND permission_code <> 'platform:firstleg:truck-appointment:edit')
OR (id = 5102154 AND permission_code <> 'platform:firstleg:truck-appointment:operate')
OR (permission_code LIKE 'platform:firstleg:truck-appointment:%'
AND (tenant_id <> 0 OR app_code <> 'PLATFORM' OR id NOT BETWEEN 5102150 AND 5102154))
) THEN
@@ -9340,6 +9352,10 @@ DELIMITER ;
CALL assert_truck_appointment_permission_ids_available();
DROP PROCEDURE IF EXISTS assert_truck_appointment_permission_ids_available;
UPDATE iam_permission
SET permission_code='platform:firstleg:truck-appointment:view',status='INACTIVE',deleted=1
WHERE id=5102151 AND permission_code='platform:firstleg:truck-appointment:list';
INSERT INTO iam_permission
(id,tenant_id,app_code,permission_type,parent_id,permission_code,permission_name,
route_path,http_method,sort_no,status,built_in,deleted)
@@ -9358,6 +9374,10 @@ SELECT role.id,permission.id,0 FROM iam_role role JOIN iam_permission permission
AND permission.permission_code LIKE 'platform:firstleg:truck-appointment:%'
WHERE role.tenant_id=0 AND role.role_code IN ('PLATFORM_ADMIN','ORDER_OPERATOR');
DELETE rp FROM iam_role_permission rp JOIN iam_permission p ON p.tenant_id=rp.tenant_id AND p.id=rp.permission_id
WHERE p.id=5102151;
UPDATE iam_permission SET status='INACTIVE',deleted=1 WHERE id=5102151;
USE baiyue_firstleg;
DROP PROCEDURE IF EXISTS assert_phase3_service_center_schema;
@@ -9374,10 +9394,12 @@ BEGIN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一迁移失败:订舱或拖车预约表未完整创建';
END IF;
IF (SELECT COUNT(*) FROM baiyue_iam.iam_permission
WHERE tenant_id=0 AND app_code='PLATFORM' AND id BETWEEN 5102140 AND 5102149
WHERE tenant_id=0 AND app_code='PLATFORM' AND status='ACTIVE' AND deleted=0
AND id BETWEEN 5102140 AND 5102149
AND permission_code LIKE 'platform:firstleg:ocean-booking:%') <> 6
OR (SELECT COUNT(*) FROM baiyue_iam.iam_permission
WHERE tenant_id=0 AND app_code='PLATFORM' AND id BETWEEN 5102150 AND 5102154
WHERE tenant_id=0 AND app_code='PLATFORM' AND status='ACTIVE' AND deleted=0
AND id BETWEEN 5102150 AND 5102154
AND permission_code LIKE 'platform:firstleg:truck-appointment:%') <> 4 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一迁移失败:订舱或拖车预约权限未完整写入';
END IF;
@@ -238,16 +238,22 @@ CREATE PROCEDURE assert_ocean_booking_permission_ids_available()
BEGIN
IF EXISTS (
SELECT 1 FROM iam_permission
WHERE (id BETWEEN 5102140 AND 5102149
AND permission_code <> CASE id
WHEN 5102140 THEN 'platform:firstleg:ocean-booking:list'
WHEN 5102141 THEN 'platform:firstleg:ocean-booking:list'
WHEN 5102142 THEN 'platform:firstleg:ocean-booking:create'
WHEN 5102146 THEN 'platform:firstleg:ocean-booking:release'
WHEN 5102147 THEN 'platform:firstleg:ocean-booking:edit'
WHEN 5102148 THEN 'platform:firstleg:ocean-booking:delete'
WHEN 5102149 THEN 'platform:firstleg:ocean-booking:allocate'
END)
WHERE (id = 5102140 AND permission_code <> 'platform:firstleg:ocean-booking:list')
OR (id = 5102141 AND permission_code NOT IN (
'platform:firstleg:ocean-booking:list',
'platform:firstleg:ocean-booking:view'))
OR (id = 5102142 AND permission_code <> 'platform:firstleg:ocean-booking:create')
OR (id = 5102143 AND permission_code <> 'platform:firstleg:ocean-booking:edit')
OR (id = 5102144 AND permission_code <> 'platform:firstleg:ocean-booking:submit')
OR (id = 5102145 AND permission_code <> 'platform:firstleg:ocean-booking:confirm')
OR (id = 5102146 AND permission_code <> 'platform:firstleg:ocean-booking:release')
OR (id = 5102147 AND permission_code NOT IN (
'platform:firstleg:ocean-booking:cancel',
'platform:firstleg:ocean-booking:edit'))
OR (id = 5102148 AND permission_code NOT IN (
'platform:firstleg:ocean-booking:change',
'platform:firstleg:ocean-booking:delete'))
OR (id = 5102149 AND permission_code <> 'platform:firstleg:ocean-booking:allocate')
OR (permission_code LIKE 'platform:firstleg:ocean-booking:%'
AND (tenant_id <> 0 OR app_code <> 'PLATFORM' OR id NOT BETWEEN 5102140 AND 5102149))
) THEN
@@ -259,6 +265,10 @@ DELIMITER ;
CALL assert_ocean_booking_permission_ids_available();
DROP PROCEDURE IF EXISTS assert_ocean_booking_permission_ids_available;
UPDATE iam_permission
SET permission_code='platform:firstleg:ocean-booking:view',status='INACTIVE',deleted=1
WHERE id=5102141 AND permission_code='platform:firstleg:ocean-booking:list';
INSERT INTO iam_permission
(id,tenant_id,app_code,permission_type,parent_id,permission_code,permission_name,
route_path,http_method,sort_no,status,built_in,deleted)
@@ -109,14 +109,13 @@ CREATE PROCEDURE assert_truck_appointment_permission_ids_available()
BEGIN
IF EXISTS (
SELECT 1 FROM iam_permission
WHERE (id BETWEEN 5102150 AND 5102154
AND permission_code <> CASE id
WHEN 5102150 THEN 'platform:firstleg:truck-appointment:list'
WHEN 5102151 THEN 'platform:firstleg:truck-appointment:list'
WHEN 5102152 THEN 'platform:firstleg:truck-appointment:create'
WHEN 5102153 THEN 'platform:firstleg:truck-appointment:edit'
WHEN 5102154 THEN 'platform:firstleg:truck-appointment:operate'
END)
WHERE (id = 5102150 AND permission_code <> 'platform:firstleg:truck-appointment:list')
OR (id = 5102151 AND permission_code NOT IN (
'platform:firstleg:truck-appointment:list',
'platform:firstleg:truck-appointment:view'))
OR (id = 5102152 AND permission_code <> 'platform:firstleg:truck-appointment:create')
OR (id = 5102153 AND permission_code <> 'platform:firstleg:truck-appointment:edit')
OR (id = 5102154 AND permission_code <> 'platform:firstleg:truck-appointment:operate')
OR (permission_code LIKE 'platform:firstleg:truck-appointment:%'
AND (tenant_id <> 0 OR app_code <> 'PLATFORM' OR id NOT BETWEEN 5102150 AND 5102154))
) THEN
@@ -128,6 +127,10 @@ DELIMITER ;
CALL assert_truck_appointment_permission_ids_available();
DROP PROCEDURE IF EXISTS assert_truck_appointment_permission_ids_available;
UPDATE iam_permission
SET permission_code='platform:firstleg:truck-appointment:view',status='INACTIVE',deleted=1
WHERE id=5102151 AND permission_code='platform:firstleg:truck-appointment:list';
INSERT INTO iam_permission
(id,tenant_id,app_code,permission_type,parent_id,permission_code,permission_name,
route_path,http_method,sort_no,status,built_in,deleted)
@@ -4,6 +4,8 @@ import test from 'node:test'
const sql = readFileSync(new URL('../../deploy/sql/头程数据库统一增量-MySQL8.sql', import.meta.url), 'utf8')
const iamSeed = readFileSync(new URL('../../iam/src/main/resources/db/phase1-admin-rbac.sql', import.meta.url), 'utf8')
const oceanBookingSchema = readFileSync(new URL('../../firstleg/src/main/resources/db/phase3-ocean-booking-schema.sql', import.meta.url), 'utf8')
const truckAppointmentSchema = readFileSync(new URL('../../firstleg/src/main/resources/db/phase3-truck-appointment-schema.sql', import.meta.url), 'utf8')
test('统一初始化 SQL 保留最小登录与客户主体', () => {
assert.match(sql, /一个平台系统管理员和一个 IT 测试客户管理员/)
@@ -31,3 +33,23 @@ test('统一初始化 SQL 提供人工验收所需公共仓储主数据', () =>
assert.ok(palletSeed, 'missing pallet initialization seed')
assert.doesNotMatch(palletSeed, /\bstatus\b|'AVAILABLE'/)
})
test('三期权限迁移允许脚本历史版本写入的旧权限并在随后收敛', () => {
for (const source of [sql, oceanBookingSchema]) {
assert.match(source, /id = 5102141[\s\S]*?ocean-booking:view/)
assert.match(source, /id = 5102147[\s\S]*?ocean-booking:cancel[\s\S]*?ocean-booking:edit/)
assert.match(source, /id = 5102148[\s\S]*?ocean-booking:change[\s\S]*?ocean-booking:delete/)
assert.match(source, /SET permission_code='platform:firstleg:ocean-booking:view',status='INACTIVE',deleted=1/)
assert.match(source, /UPDATE iam_permission SET status='INACTIVE',deleted=1 WHERE id=5102141/)
assert.match(source, /DELETE FROM iam_permission WHERE id IN \(5102143,5102144,5102145\)/)
}
for (const source of [sql, truckAppointmentSchema]) {
assert.match(source, /id = 5102151[\s\S]*?truck-appointment:view/)
assert.match(source, /SET permission_code='platform:firstleg:truck-appointment:view',status='INACTIVE',deleted=1/)
assert.match(source, /UPDATE iam_permission SET status='INACTIVE',deleted=1 WHERE id=5102151/)
}
assert.match(sql, /status='ACTIVE' AND deleted=0[\s\S]*?id BETWEEN 5102140 AND 5102149/)
assert.match(sql, /status='ACTIVE' AND deleted=0[\s\S]*?id BETWEEN 5102150 AND 5102154/)
})
+2 -2
View File
@@ -11,8 +11,8 @@ $ErrorActionPreference = 'Stop'
$Repo = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
$Workspace = (Resolve-Path (Join-Path $Repo '..')).Path
$Acceptance = Join-Path $Workspace '.codex-tmp\p23-04-acceptance'
$ExpectedSha256 = '00E8F9C24CE16FE6B4D2B6AF60460AE1AF1D264DFE110D4BDCE611F09EB69EAA'
$ExpectedLines = 15403
$ExpectedSha256 = '8A269D219F8824352818BB427033F46F79CFB4652F36F0A9DA01A5913ABB50C6'
$ExpectedLines = 15673
if ($TargetHost -notin @('127.0.0.1', 'localhost')) {
[Console]::Error.WriteLine('Refusing non-local database; only 127.0.0.1 or localhost is allowed.')