guoyu/Study-Vue-redis/fix_logininfor_permission.sql
2025-12-03 18:58:36 +08:00

63 lines
2.1 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.

-- 修复登录日志权限问题
-- 如果操作日志可以访问但登录日志不能访问执行此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;