初步实现审计

This commit is contained in:
2025-09-28 00:13:47 +08:00
parent b177781fa1
commit 1c7e13b965
9 changed files with 324 additions and 27 deletions

View File

@@ -20,6 +20,7 @@ import (
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/plan"
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/user"
"git.huangwc.com/pig/pig-farm-controller/internal/app/middleware"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/audit"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/task"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/token"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/transport"
@@ -38,6 +39,7 @@ type API struct {
logger *logs.Logger // 日志记录器,用于输出日志信息
userRepo repository.UserRepository // 用户数据仓库接口,用于用户数据操作
tokenService token.TokenService // Token 服务接口,用于 JWT token 的生成和解析
auditService audit.Service // 审计服务,用于记录用户操作
httpServer *http.Server // 标准库的 HTTP 服务器实例,用于启动和停止服务
config config.ServerConfig // API 服务器的配置,使用 infra/config 包中的 ServerConfig
userController *user.Controller // 用户控制器实例
@@ -55,6 +57,7 @@ func NewAPI(cfg config.ServerConfig,
deviceRepository repository.DeviceRepository,
planRepository repository.PlanRepository,
tokenService token.TokenService,
auditService audit.Service, // 注入审计服务
listenHandler transport.ListenHandler,
analysisTaskManager *task.AnalysisPlanTaskManager) *API {
// 设置 Gin 模式,例如 gin.ReleaseMode (生产模式) 或 gin.DebugMode (开发模式)
@@ -75,6 +78,7 @@ func NewAPI(cfg config.ServerConfig,
logger: logger,
userRepo: userRepo,
tokenService: tokenService,
auditService: auditService,
config: cfg,
listenHandler: listenHandler,
// 在 NewAPI 中初始化用户控制器,并将其作为 API 结构体的成员
@@ -133,7 +137,8 @@ func (a *API) setupRoutes() {
// --- Authenticated Routes ---
// 所有在此注册的路由都需要通过 JWT 身份验证
authGroup := a.engine.Group("/api/v1")
authGroup.Use(middleware.AuthMiddleware(a.tokenService))
authGroup.Use(middleware.AuthMiddleware(a.tokenService, a.userRepo)) // 1. 身份认证
authGroup.Use(middleware.AuditLogMiddleware(a.auditService)) // 2. 审计日志
{
// 设备相关路由组
deviceGroup := authGroup.Group("/devices")
@@ -144,7 +149,7 @@ func (a *API) setupRoutes() {
deviceGroup.PUT("/:id", a.deviceController.UpdateDevice)
deviceGroup.DELETE("/:id", a.deviceController.DeleteDevice)
}
a.logger.Info("设备相关接口注册成功 (需要认证)")
a.logger.Info("设备相关接口注册成功 (需要认证和审计)")
// 计划相关路由组
planGroup := authGroup.Group("/plans")
@@ -157,7 +162,7 @@ func (a *API) setupRoutes() {
planGroup.POST("/:id/start", a.planController.StartPlan)
planGroup.POST("/:id/stop", a.planController.StopPlan)
}
a.logger.Info("计划相关接口注册成功 (需要认证)")
a.logger.Info("计划相关接口注册成功 (需要认证和审计)")
}
}