feat:实现管理员系统核心功能

- 添加管理员数据库管理控制器和服务
- 实现管理员操作日志记录系统
- 添加数据库异常处理过滤器
- 完善管理员权限验证和响应格式
- 添加全面的属性测试覆盖
This commit is contained in:
moyin
2026-01-08 23:05:34 +08:00
parent 0f37130832
commit 6924416bbd
34 changed files with 9481 additions and 199 deletions

View File

@@ -0,0 +1,102 @@
/**
* 管理员操作日志实体
*
* 功能描述:
* - 记录管理员的所有数据库操作
* - 提供详细的审计跟踪
* - 支持操作前后数据状态记录
* - 便于安全审计和问题排查
*
* 职责分离:
* - 数据持久化:操作日志的数据库存储
* - 审计跟踪:完整的操作历史记录
* - 安全监控:敏感操作的详细记录
* - 问题排查:操作异常的详细信息
*
* 最近修改:
* - 2026-01-08: 注释规范优化 - 修正@author字段更新版本号和修改记录 (修改者: moyin)
* - 2026-01-08: 功能新增 - 创建管理员操作日志实体 (修改者: assistant)
*
* @author moyin
* @version 1.0.1
* @since 2026-01-08
* @lastModified 2026-01-08
*/
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, Index } from 'typeorm';
@Entity('admin_operation_logs')
@Index(['admin_user_id', 'created_at'])
@Index(['operation_type', 'created_at'])
@Index(['target_type', 'target_id'])
export class AdminOperationLog {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'varchar', length: 50, comment: '管理员用户ID' })
@Index()
admin_user_id: string;
@Column({ type: 'varchar', length: 100, comment: '管理员用户名' })
admin_username: string;
@Column({ type: 'varchar', length: 50, comment: '操作类型 (CREATE/UPDATE/DELETE/QUERY/BATCH)' })
operation_type: 'CREATE' | 'UPDATE' | 'DELETE' | 'QUERY' | 'BATCH';
@Column({ type: 'varchar', length: 100, comment: '目标资源类型 (users/user_profiles/zulip_accounts)' })
target_type: string;
@Column({ type: 'varchar', length: 50, nullable: true, comment: '目标资源ID' })
target_id?: string;
@Column({ type: 'varchar', length: 200, comment: '操作描述' })
operation_description: string;
@Column({ type: 'varchar', length: 100, comment: 'HTTP方法和路径' })
http_method_path: string;
@Column({ type: 'json', nullable: true, comment: '请求参数' })
request_params?: Record<string, any>;
@Column({ type: 'json', nullable: true, comment: '操作前数据状态' })
before_data?: Record<string, any>;
@Column({ type: 'json', nullable: true, comment: '操作后数据状态' })
after_data?: Record<string, any>;
@Column({ type: 'varchar', length: 20, comment: '操作结果 (SUCCESS/FAILED)' })
operation_result: 'SUCCESS' | 'FAILED';
@Column({ type: 'text', nullable: true, comment: '错误信息' })
error_message?: string;
@Column({ type: 'varchar', length: 50, nullable: true, comment: '错误码' })
error_code?: string;
@Column({ type: 'int', comment: '操作耗时(毫秒)' })
duration_ms: number;
@Column({ type: 'varchar', length: 45, nullable: true, comment: '客户端IP地址' })
client_ip?: string;
@Column({ type: 'varchar', length: 500, nullable: true, comment: '用户代理' })
user_agent?: string;
@Column({ type: 'varchar', length: 50, comment: '请求ID' })
request_id: string;
@Column({ type: 'json', nullable: true, comment: '额外的上下文信息' })
context?: Record<string, any>;
@CreateDateColumn({ comment: '创建时间' })
created_at: Date;
@Column({ type: 'boolean', default: false, comment: '是否为敏感操作' })
is_sensitive: boolean;
@Column({ type: 'int', default: 0, comment: '影响的记录数量' })
affected_records: number;
@Column({ type: 'varchar', length: 100, nullable: true, comment: '批量操作的批次ID' })
batch_id?: string;
}