Files
BMS/bms-back/sql/system/20261104_user_impersonation_permission.sql
2026-11-04 15:20:05 +08:00

32 lines
1.8 KiB
SQL

-- 用户管理代登录按钮权限(MySQL 5.7+)。
-- 仅新增菜单权限,不修改角色授权;后端同时限制只有 user_id=1 的超级管理员可使用。
-- 父菜单不存在或存在多个候选时不会插入,需先人工核对;重复执行不会重复新增。
SET NAMES utf8mb4;
SELECT menu_id, menu_name, parent_id, component, perms, menu_type, status
FROM sys_menu
WHERE menu_type = 'C' AND (component = 'system/user/index' OR perms = 'system:user:list');
SELECT menu_id, menu_name, parent_id, menu_type, perms, status
FROM sys_menu WHERE perms = 'system:user:impersonate';
INSERT INTO sys_menu
(menu_name, parent_id, order_num, path, component, is_frame, is_cache,
menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT '代登录用户', p.menu_id, 10, '', NULL, 1, 0, 'F', '0', '0',
'system:user:impersonate', '#', 'admin', NOW(), '超级管理员以目标用户身份进入系统'
FROM sys_menu p
WHERE p.menu_type = 'C'
AND (p.component = 'system/user/index' OR p.perms = 'system:user:list')
AND (SELECT COUNT(*) FROM (SELECT menu_id FROM sys_menu
WHERE menu_type = 'C' AND (component = 'system/user/index' OR perms = 'system:user:list')) candidates) = 1
AND NOT EXISTS (SELECT 1 FROM (SELECT menu_id FROM sys_menu
WHERE perms = 'system:user:impersonate') existing_permission);
-- 成功标识:仅有一条权限,类型为 F,状态为 0,父菜单为用户管理。
-- 如未满足,保留现状并核对上方查询结果;修正冲突后重新执行完整文件。
SELECT b.menu_id, b.menu_name, b.perms, b.menu_type, b.status,
p.menu_id AS parent_id, p.menu_name AS parent_name, p.component AS parent_component
FROM sys_menu b LEFT JOIN sys_menu p ON p.menu_id = b.parent_id
WHERE b.perms = 'system:user:impersonate';