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