admin/sql/fix_rbac_bad_guids.sql
zzh ffaf325563 fix(xhs): repair publish/task list SQL and RBAC menu seeds
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 11:23:37 +08:00

96 lines
3.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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;
-- ========== role_permission / user_role(登录加载权限时会读 CreateUserId GUID)==========
UPDATE `role_permission`
SET `CreateUserId` = @ADMIN_USER_ID
WHERE `CreateUserId` IS NOT NULL AND CAST(`CreateUserId` AS CHAR) NOT REGEXP @GUID_RE;
UPDATE `user_role`
SET `CreateUserId` = @ADMIN_USER_ID
WHERE `CreateUserId` IS NOT NULL AND CAST(`CreateUserId` AS CHAR) NOT REGEXP @GUID_RE;
-- 修复后请再执行 diagnose_rbac_bad_guids.sql 确认无脏行