2.8 KiB
2.8 KiB
问题分析
1. 获取操作日志功能失败
- 错误原因:数据库中缺少
operation_logs表 - 代码分析:
operation_log_repository.go中的GetOperationLogs函数尝试从operation_logs表查询数据,但该表不存在 - SQL文件状态:
nl_blog.sql中没有定义operation_logs表
2. 获取角色列表功能失败
- 错误原因:数据库中缺少
roles表 - 代码分析:
role_repository.go中的GetRoles函数尝试从roles表查询数据,但该表不存在 - SQL文件状态:
nl_blog.sql中没有定义roles表 - 设计不一致:用户表
users中role字段使用enum('admin','editor','viewer')类型,表明角色设计为内嵌式,而非独立表管理
修复方案
1. 修复操作日志功能
- 创建
operation_logs表:在nl_blog.sql中添加表定义 - 表结构:
DROP TABLE IF EXISTS `operation_logs`; CREATE TABLE `operation_logs` ( `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` bigint UNSIGNED NOT NULL COMMENT '操作用户ID', `username` varchar(50) NOT NULL COMMENT '操作用户名', `ip` varchar(45) NOT NULL COMMENT '操作IP地址', `path` varchar(255) NOT NULL COMMENT '操作路径', `method` varchar(10) NOT NULL COMMENT 'HTTP方法', `params` text NULL COMMENT '请求参数', `status` int NOT NULL COMMENT '响应状态码', `duration` int NOT NULL COMMENT '响应时间(毫秒)', `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_user_id`(`user_id` ASC) USING BTREE, INDEX `idx_created_at`(`created_at` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志表' ROW_FORMAT = Dynamic;
2. 修复角色列表功能
-
方案A:修改代码以适应现有设计(推荐)
- 由于用户表中角色是
enum类型,系统可能不需要独立的roles表 - 修改
role_repository.go中的GetRoles函数,返回硬编码的角色列表 - 这样可以保持与现有数据库设计的一致性
- 由于用户表中角色是
-
方案B:创建
roles表并迁移数据- 在
nl_blog.sql中添加roles表定义 - 插入初始角色数据
- 这种方案需要更多的数据库迁移工作
- 在
3. 实现步骤
- 首先创建
operation_logs表,修复操作日志功能 - 然后根据系统设计选择合适的角色管理方案,修复角色列表功能
- 更新
nl_blog.sql文件,确保包含所有必要的表定义 - 测试修复后的功能
预期结果
- 操作日志功能能够正常获取日志记录
- 角色列表功能能够正常返回角色数据
- 系统设计与数据库结构保持一致