87 lines
2.8 KiB
SQL
87 lines
2.8 KiB
SQL
-- RBAC 库:修复 GUID 脏数据(menu / role / user / organization 等)
|
||
-- 与 diagnose_rbac_bad_guids.sql 配套;修复后重新跑诊断应无结果
|
||
--
|
||
-- ⚠️ 在 API 实际连接的 RBAC 库执行(api.nanafa.com 对应库,不是本机 oms 除非 API 连本机)
|
||
|
||
SET @GUID_RE = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';
|
||
SET @ROOT_PID = '00000000-0000-0000-0000-000000000000';
|
||
|
||
SET @ADMIN_USER_ID = (
|
||
SELECT `Id` FROM `user`
|
||
WHERE `Account` = 'admin' AND (`IsDeleted` = 0 OR `IsDeleted` IS NULL)
|
||
LIMIT 1
|
||
);
|
||
SET @ADMIN_USER_ID = IFNULL(
|
||
@ADMIN_USER_ID,
|
||
(SELECT `Id` FROM `user` WHERE `IsDeleted` = 0 OR `IsDeleted` IS NULL ORDER BY `CreateTime` LIMIT 1)
|
||
);
|
||
|
||
SELECT @ADMIN_USER_ID AS admin_user_id_used;
|
||
|
||
-- ========== menu ==========
|
||
UPDATE `menu`
|
||
SET `CreateUserId` = @ADMIN_USER_ID
|
||
WHERE `CreateUserId` IS NOT NULL AND `CreateUserId` NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `menu`
|
||
SET `UpdateUserId` = @ADMIN_USER_ID
|
||
WHERE `UpdateUserId` IS NOT NULL AND `UpdateUserId` NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `menu`
|
||
SET `PId` = @ROOT_PID
|
||
WHERE `PId` IS NOT NULL AND `PId` NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `menu`
|
||
SET `ConcurrencyStamp` = UUID()
|
||
WHERE `ConcurrencyStamp` IS NOT NULL AND `ConcurrencyStamp` NOT REGEXP @GUID_RE;
|
||
|
||
-- 小红书种子菜单(精确 Id)
|
||
UPDATE `menu`
|
||
SET `CreateUserId` = @ADMIN_USER_ID,
|
||
`UpdateUserId` = @ADMIN_USER_ID
|
||
WHERE `Id` IN (
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567801',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567802',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567803',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567804',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567805',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567806',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567807',
|
||
'a1b2c3d4-e5f6-7890-abcd-ef1234567808'
|
||
);
|
||
|
||
-- ========== role(若列为 CHAR(36) GUID)==========
|
||
UPDATE `role`
|
||
SET `CreateUserId` = @ADMIN_USER_ID
|
||
WHERE `CreateUserId` IS NOT NULL AND CAST(`CreateUserId` AS CHAR) NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `role`
|
||
SET `UpdateUserId` = @ADMIN_USER_ID
|
||
WHERE `UpdateUserId` IS NOT NULL AND CAST(`UpdateUserId` AS CHAR) NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `role`
|
||
SET `ConcurrencyStamp` = UUID()
|
||
WHERE `ConcurrencyStamp` IS NOT NULL AND `ConcurrencyStamp` NOT REGEXP @GUID_RE;
|
||
|
||
-- ========== user ==========
|
||
UPDATE `user`
|
||
SET `OrganizationId` = NULL
|
||
WHERE `OrganizationId` IS NOT NULL
|
||
AND `OrganizationId` <> ''
|
||
AND `OrganizationId` NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `user`
|
||
SET `ConcurrencyStamp` = UUID()
|
||
WHERE `ConcurrencyStamp` IS NOT NULL AND `ConcurrencyStamp` NOT REGEXP @GUID_RE;
|
||
|
||
-- ========== organization ==========
|
||
UPDATE `organization`
|
||
SET `ParentId` = NULL
|
||
WHERE `ParentId` IS NOT NULL AND `ParentId` <> '' AND `ParentId` NOT REGEXP @GUID_RE;
|
||
|
||
UPDATE `organization`
|
||
SET `LeaderId` = NULL
|
||
WHERE `LeaderId` IS NOT NULL AND `LeaderId` <> '' AND `LeaderId` NOT REGEXP @GUID_RE;
|
||
|
||
-- 修复后请再执行 diagnose_rbac_bad_guids.sql 确认无脏行
|