Files
smart_grid_iot/database/init.sql
T
andyesfly 2534723842 refactor: 优化权限管理与登录流程,修复细节问题
1.  调整仪表盘图标从DeviceOutlined为MonitorOutlined
2.  新增403无权访问页面与路由配置
3.  完善权限存储与路由守卫逻辑
4.  修复用户信息获取与token持久化问题
5.  补充普通管理员权限初始化与补丁脚本
6.  优化后端用户服务与认证控制器逻辑
7.  调整登录表单交互与请求流程
2026-05-28 16:25:26 +08:00

218 lines
11 KiB
SQL

-- ============================================================
-- 智能电网物联网设备后台管理系统 - 数据库初始化脚本
-- 数据库名称: smart_grid_iot
-- 字符集: utf8mb4 (支持完整Unicode,包括emoji)
-- 排序规则: utf8mb4_unicode_ci
-- 引擎: InnoDB (支持事务、外键约束)
-- MySQL版本要求: 5.7+ / 8.0+
-- 创建时间: 2026-05-27
-- ============================================================
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS smart_grid_iot
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE smart_grid_iot;
-- ============================================================
-- 表1: users (用户表)
-- 存储系统用户信息,包括管理员和普通用户
-- ============================================================
CREATE TABLE `users` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '加密密码(bcrypt)',
`nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用 1-启用',
`last_login_at` datetime DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` varchar(45) DEFAULT NULL COMMENT '最后登录IP(支持IPv6)',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_status` (`status`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- ============================================================
-- 表2: roles (角色表)
-- 存储系统角色信息,用于RBAC权限控制
-- ============================================================
CREATE TABLE `roles` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(50) NOT NULL COMMENT '角色名称',
`code` varchar(50) NOT NULL COMMENT '角色编码(唯一标识)',
`description` varchar(255) DEFAULT NULL COMMENT '描述',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用 1-启用',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(数值越小越靠前)',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
-- ============================================================
-- 表3: permissions (权限表)
-- 存储系统权限信息,包括菜单、按钮、API三种类型
-- 支持树形结构(通过parent_id实现父子关系)
-- ============================================================
CREATE TABLE `permissions` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(50) NOT NULL COMMENT '权限名称',
`code` varchar(100) NOT NULL COMMENT '权限编码(唯一标识)',
`type` enum('menu','button','api') NOT NULL DEFAULT 'menu' COMMENT '权限类型: menu-菜单 button-按钮 api-接口',
`parent_id` bigint DEFAULT NULL COMMENT '父权限ID(NULL表示一级菜单)',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(数值越小越靠前)',
`icon` varchar(50) DEFAULT NULL COMMENT '图标(菜单类型使用)',
`route` varchar(255) DEFAULT NULL COMMENT '路由路径(菜单类型使用)',
`component` varchar(255) DEFAULT NULL COMMENT '组件路径(菜单类型使用)',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用 1-启用',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
-- ============================================================
-- 表4: user_roles (用户角色关联表)
-- 用户和角色的多对多关联关系
-- 一个用户可以拥有多个角色,一个角色可以分配给多个用户
-- ============================================================
CREATE TABLE `user_roles` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint NOT NULL COMMENT '用户ID',
`role_id` bigint NOT NULL COMMENT '角色ID',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_role` (`user_id`, `role_id`),
KEY `idx_role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';
-- ============================================================
-- 表5: role_permissions (角色权限关联表)
-- 角色和权限的多对多关联关系
-- 一个角色可以拥有多个权限,一个权限可以分配给多个角色
-- ============================================================
CREATE TABLE `role_permissions` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`role_id` bigint NOT NULL COMMENT '角色ID',
`permission_id` bigint NOT NULL COMMENT '权限ID',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_role_permission` (`role_id`, `permission_id`),
KEY `idx_permission_id` (`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';
-- ============================================================
-- 表6: operation_logs (操作日志表)
-- 记录用户的操作行为,用于审计和安全追踪
-- 包含请求详情、响应信息和性能数据
-- ============================================================
CREATE TABLE `operation_logs` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint DEFAULT NULL COMMENT '操作用户ID',
`username` varchar(50) DEFAULT NULL COMMENT '操作人用户名',
`action` varchar(255) NOT NULL COMMENT '操作描述',
`module` varchar(50) DEFAULT NULL COMMENT '操作模块',
`method` varchar(10) DEFAULT NULL COMMENT '请求方法(GET/POST/PUT/DELETE等)',
`url` varchar(500) DEFAULT NULL COMMENT '请求URL',
`ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址(支持IPv6)',
`user_agent` varchar(500) DEFAULT NULL COMMENT '浏览器UA',
`request_params` text COMMENT '请求参数(JSON格式)',
`response_data` text COMMENT '响应数据(JSON格式)',
`status_code` int DEFAULT NULL COMMENT 'HTTP响应状态码',
`duration` int DEFAULT NULL COMMENT '请求耗时(毫秒)',
`error_message` text COMMENT '错误信息(仅失败时记录)',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_username` (`username`),
KEY `idx_module` (`module`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
-- ============================================================
-- 初始数据插入
-- ============================================================
-- 插入管理员账户
-- 用户名: admin
-- 密码: admin123456 (bcrypt加密, saltRounds=10)
INSERT INTO `users` (`username`, `password`, `nickname`, `avatar`, `status`) VALUES
('admin', '$2a$10$EBHdTgzyUj0ofbwLyEHZ7OifI/aC7j9ZWOnpg9Ha1b/GXSUEAVZVe', '超级管理员', NULL, 1);
-- 插入初始角色
INSERT INTO `roles` (`name`, `code`, `description`, `sort_order`) VALUES
('超级管理员', 'super_admin', '拥有系统所有权限', 1),
('普通管理员', 'admin', '拥有大部分管理权限', 2),
('运维人员', 'operator', '拥有设备管理和查看权限', 3);
-- 插入一级菜单权限
INSERT INTO `permissions` (`name`, `code`, `type`, `parent_id`, `sort_order`, `icon`, `route`, `component`) VALUES
('仪表盘', 'dashboard', 'menu', NULL, 1, 'DashboardOutlined', '/dashboard', 'dashboard/index'),
('系统管理', 'system', 'menu', NULL, 2, 'SettingOutlined', '/system', NULL),
('系统设置', 'settings', 'menu', NULL, 3, 'ToolOutlined', '/settings', NULL);
-- 插入二级菜单权限(系统管理下的子菜单)
INSERT INTO `permissions` (`name`, `code`, `type`, `parent_id`, `sort_order`, `icon`, `route`, `component`) VALUES
('用户管理', 'user:list', 'menu', 2, 1, 'UserOutlined', '/system/user', 'system/user/index'),
('角色管理', 'role:list', 'menu', 2, 2, 'SafetyCertificateOutlined', '/system/role', 'system/role/index');
-- 插入按钮权限(用户管理的操作按钮)
INSERT INTO `permissions` (`name`, `code`, `type`, `parent_id`, `sort_order`) VALUES
('新增用户', 'user:create', 'button', 4, 1),
('编辑用户', 'user:update', 'button', 4, 2),
('删除用户', 'user:delete', 'button', 4, 3),
('重置密码', 'user:resetPwd', 'button', 4, 4);
-- 插入按钮权限(角色管理的操作按钮)
INSERT INTO `permissions` (`name`, `code`, `type`, `parent_id`, `sort_order`) VALUES
('新增角色', 'role:create', 'button', 5, 1),
('编辑角色', 'role:update', 'button', 5, 2),
('删除角色', 'role:delete', 'button', 5, 3),
('分配权限', 'role:assignPermission', 'button', 5, 4);
-- 插入按钮权限(系统设置的操作按钮)
INSERT INTO `permissions` (`name`, `code`, `type`, `parent_id`, `sort_order`) VALUES
('基本设置', 'system:basicSetting', 'button', 3, 1),
('安全设置', 'system:securitySetting', 'button', 3, 2);
-- 插入一级菜单权限(操作日志)
INSERT INTO `permissions` (`name`, `code`, `type`, `parent_id`, `sort_order`, `icon`, `route`, `component`) VALUES
('操作日志', 'log:operation', 'menu', NULL, 4, 'FileTextOutlined', '/log/operation', 'log/operation');
-- 给admin用户分配超级管理员角色(user_id=1, role_id=1)
INSERT INTO `user_roles` (`user_id`, `role_id`) VALUES (1, 1);
-- 给超级管理员角色(role_id=1)分配所有权限
INSERT INTO `role_permissions` (`role_id`, `permission_id`)
SELECT 1, id FROM permissions;
-- 给普通管理员角色(role_id=2)分配基础管理权限(不含删除/重置密码/角色管理等高危操作)
INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES
(2, 1), -- dashboard 仪表盘
(2, 2), -- system 系统管理(父菜单)
(2, 3), -- settings 系统设置(父菜单)
(2, 4), -- user:list 用户管理
(2, 6), -- user:create 新增用户
(2, 7), -- user:update 编辑用户
(2, 5), -- role:list 角色管理(仅查看)
(2, 14), -- system:basicSetting 基本设置
(2, 15), -- system:securitySetting 安全设置
(2, 16); -- log:operation 操作日志
-- ============================================================
-- 初始化完成提示
-- ============================================================
SELECT '数据库初始化完成!' AS message;
SELECT CONCAT('管理员账户: admin / admin123456') AS account_info;
SELECT COUNT(*) AS total_tables FROM information_schema.tables WHERE table_schema = 'smart_grid_iot';