63 lines
2.1 KiB
MySQL
63 lines
2.1 KiB
MySQL
|
|
-- 修复登录日志权限问题
|
|||
|
|
-- 如果操作日志可以访问,但登录日志不能访问,执行此SQL
|
|||
|
|
|
|||
|
|
-- 1. 首先检查当前用户的权限情况
|
|||
|
|
SELECT
|
|||
|
|
u.user_name,
|
|||
|
|
r.role_name,
|
|||
|
|
r.role_key,
|
|||
|
|
m.menu_name,
|
|||
|
|
m.perms,
|
|||
|
|
m.status as menu_status
|
|||
|
|
FROM sys_user u
|
|||
|
|
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id
|
|||
|
|
LEFT JOIN sys_role r ON ur.role_id = r.role_id
|
|||
|
|
LEFT JOIN sys_role_menu rm ON r.role_id = rm.role_id
|
|||
|
|
LEFT JOIN sys_menu m ON rm.menu_id = m.menu_id
|
|||
|
|
WHERE u.user_name = 'admin' -- 替换为你的用户名
|
|||
|
|
AND m.perms IN ('monitor:logininfor:list', 'monitor:operlog:list')
|
|||
|
|
ORDER BY m.perms;
|
|||
|
|
|
|||
|
|
-- 2. 如果发现登录日志权限缺失,执行以下SQL修复
|
|||
|
|
-- 方法A:如果操作日志权限存在,复制相同的角色菜单关联到登录日志
|
|||
|
|
INSERT INTO sys_role_menu (role_id, menu_id)
|
|||
|
|
SELECT DISTINCT
|
|||
|
|
rm.role_id,
|
|||
|
|
(SELECT menu_id FROM sys_menu WHERE perms = 'monitor:logininfor:list' LIMIT 1) as menu_id
|
|||
|
|
FROM sys_role_menu rm
|
|||
|
|
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
|
|||
|
|
WHERE m.perms = 'monitor:operlog:list'
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM sys_role_menu rm2
|
|||
|
|
INNER JOIN sys_menu m2 ON rm2.menu_id = m2.menu_id
|
|||
|
|
WHERE rm2.role_id = rm.role_id
|
|||
|
|
AND m2.perms = 'monitor:logininfor:list'
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 方法B:直接为所有角色添加登录日志权限(如果菜单存在)
|
|||
|
|
-- 注意:执行前请确认 sys_menu 表中存在 perms = 'monitor:logininfor:list' 的记录
|
|||
|
|
INSERT INTO sys_role_menu (role_id, menu_id)
|
|||
|
|
SELECT DISTINCT
|
|||
|
|
r.role_id,
|
|||
|
|
(SELECT menu_id FROM sys_menu WHERE perms = 'monitor:logininfor:list' LIMIT 1) as menu_id
|
|||
|
|
FROM sys_role r
|
|||
|
|
WHERE NOT EXISTS (
|
|||
|
|
SELECT 1 FROM sys_role_menu rm
|
|||
|
|
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
|
|||
|
|
WHERE rm.role_id = r.role_id
|
|||
|
|
AND m.perms = 'monitor:logininfor:list'
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 3. 验证修复结果
|
|||
|
|
SELECT
|
|||
|
|
r.role_name,
|
|||
|
|
r.role_key,
|
|||
|
|
m.menu_name,
|
|||
|
|
m.perms
|
|||
|
|
FROM sys_role r
|
|||
|
|
INNER JOIN sys_role_menu rm ON r.role_id = rm.role_id
|
|||
|
|
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
|
|||
|
|
WHERE m.perms IN ('monitor:logininfor:list', 'monitor:operlog:list')
|
|||
|
|
ORDER BY r.role_id, m.perms;
|
|||
|
|
|