100 lines
4.7 KiB
PL/PgSQL
100 lines
4.7 KiB
PL/PgSQL
-- ===================================================================
|
||
-- 菜单权限系统数据库迁移脚本
|
||
-- 创建日期: 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;
|