初步实现审计

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

@@ -5,18 +5,16 @@ import (
"net/http"
"strings"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/audit"
"git.huangwc.com/pig/pig-farm-controller/internal/app/service/token"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
"github.com/gin-gonic/gin"
)
const (
// ContextUserIDKey 是存储在 gin.Context 中的用户ID的键名
ContextUserIDKey = "userID"
"gorm.io/gorm"
)
// AuthMiddleware 创建一个Gin中间件用于JWT身份验证
// 它依赖于 TokenService 来解析和验证 token
func AuthMiddleware(tokenService token.TokenService) gin.HandlerFunc {
// 它依赖于 TokenService 来解析和验证 token,并使用 UserRepository 来获取完整的用户信息
func AuthMiddleware(tokenService token.TokenService, userRepo repository.UserRepository) gin.HandlerFunc {
return func(c *gin.Context) {
// 从 Authorization header 获取 token
authHeader := c.GetHeader("Authorization")
@@ -41,8 +39,21 @@ func AuthMiddleware(tokenService token.TokenService) gin.HandlerFunc {
return
}
// 将解析出的用户ID存储在 context 中,以便后续的处理函数使用
c.Set(ContextUserIDKey, claims.UserID)
// 根据 token 中的用户ID从数据库中获取完整的用户信息
user, err := userRepo.FindByID(claims.UserID)
if err != nil {
if err == gorm.ErrRecordNotFound {
// Token有效但对应的用户已不存在
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "授权用户不存在"})
return
}
// 其他数据库查询错误
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "获取用户信息失败"})
return
}
// 将完整的用户对象存储在 context 中,以便后续的处理函数使用
c.Set(audit.ContextUserKey, user)
// 继续处理请求链中的下一个处理程序
c.Next()