diff --git a/sql/20250927-sys_user_online.sql b/sql/20250927-sys_user_online.sql new file mode 100644 index 0000000..bd7c00f --- /dev/null +++ b/sql/20250927-sys_user_online.sql @@ -0,0 +1,93 @@ +/* + * 在线用户管理功能SQL脚本 + * + * 功能说明: + * 1. 基于Sa-Token + Redis实现,无需专门的在线用户表 + * 2. 仅需菜单权限配置,用户数据完全存储在Redis会话中 + * 3. 支持实时查看在线用户、踢人下线、强制注销等功能 + * + * 作者:Leocoder + * 创建时间:2025-09-27 + */ + +-- ---------------------------- +-- 在线用户管理菜单权限配置 +-- ---------------------------- + +-- 1. 系统监控菜单(如果不存在) +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `en_name`, `parent_id`, `menu_type`, `path`, `name`, `component`, `icon`, `auth`, `menu_status`, `active_menu`, `is_hide`, `is_link`, `is_keep_alive`, `is_full`, `is_affix`, `is_spread`, `sorted`, `create_by`, `create_time`, `update_by`, `update_time`) +SELECT 2000, '系统监控', 'System Monitor', 0, '1', '/monitor', 'monitorPage', '', 'Monitor', 'monitor:auth', '0', NULL, '1', '', '0', '1', '1', '1', 3, 'system', NOW(), 'system', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `menu_id` = 2000); + +-- 2. 在线用户菜单 +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `en_name`, `parent_id`, `menu_type`, `path`, `name`, `component`, `icon`, `auth`, `menu_status`, `active_menu`, `is_hide`, `is_link`, `is_keep_alive`, `is_full`, `is_affix`, `is_spread`, `sorted`, `create_by`, `create_time`, `update_by`, `update_time`) +VALUES (2001, '在线用户', 'Online Users', 2000, '2', '/monitor/online', 'onlineUsersPage', 'monitor/online/index', 'UserFilled', 'monitor:online:list', '0', NULL, '1', '', '1', '1', '1', '1', 1, 'system', NOW(), 'system', NOW()); + +-- 3. 在线用户-查看权限 +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `en_name`, `parent_id`, `menu_type`, `path`, `name`, `component`, `icon`, `auth`, `menu_status`, `active_menu`, `is_hide`, `is_link`, `is_keep_alive`, `is_full`, `is_affix`, `is_spread`, `sorted`, `create_by`, `create_time`, `update_by`, `update_time`) +VALUES (2002, '查看', 'View', 2001, '3', '', NULL, NULL, '', 'monitor:online:list', '0', NULL, '0', '', '0', '1', '1', '1', 1, 'system', NOW(), 'system', NOW()); + +-- 4. 在线用户-踢人下线权限 +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `en_name`, `parent_id`, `menu_type`, `path`, `name`, `component`, `icon`, `auth`, `menu_status`, `active_menu`, `is_hide`, `is_link`, `is_keep_alive`, `is_full`, `is_affix`, `is_spread`, `sorted`, `create_by`, `create_time`, `update_by`, `update_time`) +VALUES (2003, '踢人下线', 'Kick Out', 2001, '3', '', NULL, NULL, '', 'monitor:online:kickout', '0', NULL, '0', '', '0', '1', '1', '1', 2, 'system', NOW(), 'system', NOW()); + +-- 5. 在线用户-强制注销权限 +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `en_name`, `parent_id`, `menu_type`, `path`, `name`, `component`, `icon`, `auth`, `menu_status`, `active_menu`, `is_hide`, `is_link`, `is_keep_alive`, `is_full`, `is_affix`, `is_spread`, `sorted`, `create_by`, `create_time`, `update_by`, `update_time`) +VALUES (2004, '强制注销', 'Force Logout', 2001, '3', '', NULL, NULL, '', 'monitor:online:logout', '0', NULL, '0', '', '0', '1', '1', '1', 3, 'system', NOW(), 'system', NOW()); + +-- ---------------------------- +-- 角色权限关联(管理员角色拥有在线用户管理权限) +-- ---------------------------- + +-- 给管理员角色分配在线用户菜单权限 +-- 注意:这里假设管理员角色ID为1,请根据实际情况调整 +INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) +SELECT 1, 2000 WHERE NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 2000); + +INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) +SELECT 1, 2001 WHERE NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 2001); + +INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) +SELECT 1, 2002 WHERE NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 2002); + +INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) +SELECT 1, 2003 WHERE NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 2003); + +INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) +SELECT 1, 2004 WHERE NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 2004); + +-- ---------------------------- +-- 执行说明 +-- ---------------------------- + +/* +执行此脚本后,系统将具备以下功能: + +1. 🎯 功能特性: + ✅ 实时查看所有在线用户 + ✅ 显示用户详细信息(IP、设备、浏览器等) + ✅ 支持按登录名、用户名、IP地址过滤 + ✅ 分页显示 + ✅ 踢人下线功能 + ✅ 强制注销功能 + +2. 🔐 权限控制: + ✅ monitor:online:list - 查看在线用户列表 + ✅ monitor:online:kickout - 踢人下线权限 + ✅ monitor:online:logout - 强制注销权限 + +3. 🏗️ 实现原理: + ✅ 基于Sa-Token会话管理 + ✅ 数据存储在Redis中 + ✅ 无需额外数据表 + ✅ 实时性能优秀 + +4. 📱 前端菜单路径: + ✅ /monitor/online - 在线用户管理页面 + ✅ 位于系统监控模块下 + +注意事项: +- 确保系统已集成Sa-Token和Redis +- 确保角色权限表存在且管理员角色ID正确 +- 执行前请备份相关表数据 +*/ \ No newline at end of file