-- ============================================================= -- 角色「平台下发 + 租户只读」显式锁定 - 增量迁移 -- -- 场景:平台端可建 cid=2 且 tenant_id=0 的全局角色下发到租户后台。 -- 此前"租户不可改/不可删"的判定绑死在 tenant_id==0 上, -- 一是无法表达"落到具体租户头上但仍只读", -- 二是后端看 tenant_id、前端看 is_custom,两处口径不一致会漂移。 -- 本迁移把锁定语义收敛为独立列 is_locked。 -- -- 执行顺序: -- 1) 加 is_locked / source_role_id 两列 -- 2) 回填:现存全局租户角色(cid=2 且 tenant_id=0)标记为锁定, -- 保证代码改用 is_locked 判定后,这两个角色不会突然变得可被租户改写。 -- -- 注意:MySQL 不支持 ADD COLUMN IF NOT EXISTS,本脚本重复执行会在第 1 步 -- 报 Duplicate column name 并停止,属预期,不会破坏已回填的数据。 -- ============================================================= -- 1. 角色表补锁定列 ALTER TABLE `yz_system_admin_role` ADD COLUMN `is_locked` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '1=平台下发,租户端只读(不可改名/改权限/删除)' AFTER `is_custom`, ADD COLUMN `source_role_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源角色ID(平台下发时记录,0=非下发)' AFTER `is_locked`; -- 2. 回填存量全局租户角色 UPDATE `yz_system_admin_role` SET `is_locked` = 1 WHERE `cid` = 2 AND `tenant_id` = 0 AND `delete_time` IS NULL AND `is_locked` = 0;