-- =================================================================== -- 菜单权限系统数据库迁移脚本 -- 创建日期: 2025-12-10 -- 说明: 添加 menus 表和 role_menu_permissions 表,实现基于角色的菜单权限管理 -- =================================================================== -- ---------------------------- -- Table structure for menus -- ---------------------------- DROP TABLE IF EXISTS `menus`; CREATE TABLE `menus` ( `menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', `menu_code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单代码(唯一标识)', `menu_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称', `menu_icon` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单图标标识', `menu_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单URL/路由', `menu_type` enum('action','link','divider') COLLATE utf8mb4_unicode_ci DEFAULT 'action' COMMENT '菜单类型: action-操作/link-链接/divider-分隔符', `parent_id` int(11) DEFAULT NULL COMMENT '父菜单ID(用于层级菜单)', `sort_order` int(11) DEFAULT 0 COMMENT '排序顺序', `is_active` tinyint(1) DEFAULT 1 COMMENT '是否启用: 1-启用, 0-禁用', `description` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单描述', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`menu_id`), UNIQUE KEY `uk_menu_code` (`menu_code`), KEY `idx_parent_id` (`parent_id`), KEY `idx_is_active` (`is_active`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统菜单表'; -- ---------------------------- -- Table structure for role_menu_permissions -- ---------------------------- DROP TABLE IF EXISTS `role_menu_permissions`; CREATE TABLE `role_menu_permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限ID', `role_id` int(11) NOT NULL COMMENT '角色ID', `menu_id` int(11) NOT NULL COMMENT '菜单ID', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_role_menu` (`role_id`,`menu_id`), KEY `idx_role_id` (`role_id`), KEY `idx_menu_id` (`menu_id`), CONSTRAINT `fk_rmp_role_id` FOREIGN KEY (`role_id`) REFERENCES `roles` (`role_id`) ON DELETE CASCADE, CONSTRAINT `fk_rmp_menu_id` FOREIGN KEY (`menu_id`) REFERENCES `menus` (`menu_id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单权限映射表'; -- ---------------------------- -- 初始化菜单数据(基于现有系统的下拉菜单) -- ---------------------------- BEGIN; -- 用户菜单项 INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `sort_order`, `is_active`, `description`) VALUES ('change_password', '修改密码', 'KeyRound', NULL, 'action', 1, 1, '用户修改自己的密码'), ('prompt_management', '提示词仓库', 'BookText', '/prompt-management', 'link', 2, 1, '管理AI提示词模版'), ('platform_admin', '平台管理', 'Shield', '/admin/management', 'link', 3, 1, '平台管理员后台'), ('logout', '退出登录', 'LogOut', NULL, 'action', 99, 1, '退出当前账号'); COMMIT; -- ---------------------------- -- 初始化角色权限数据 -- 注意:角色表已存在,role_id=1为平台管理员,role_id=2为普通用户 -- ---------------------------- BEGIN; -- 平台管理员(role_id=1)拥有所有菜单权限 INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`) SELECT 1, menu_id FROM `menus` WHERE is_active = 1; -- 普通用户(role_id=2)拥有除"平台管理"外的所有菜单权限 INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`) SELECT 2, menu_id FROM `menus` WHERE menu_code != 'platform_admin' AND is_active = 1; COMMIT; -- ---------------------------- -- 查询验证 -- ---------------------------- -- 查看所有菜单 -- SELECT * FROM menus ORDER BY sort_order; -- 查看平台管理员的菜单权限 -- SELECT r.role_name, m.menu_name, m.menu_code, m.menu_url -- FROM role_menu_permissions rmp -- JOIN roles r ON rmp.role_id = r.role_id -- JOIN menus m ON rmp.menu_id = m.menu_id -- WHERE r.role_id = 1 -- ORDER BY m.sort_order; -- 查看普通用户的菜单权限 -- SELECT r.role_name, m.menu_name, m.menu_code, m.menu_url -- FROM role_menu_permissions rmp -- JOIN roles r ON rmp.role_id = r.role_id -- JOIN menus m ON rmp.menu_id = m.menu_id -- WHERE r.role_id = 2 -- ORDER BY m.sort_order;