package middleware import ( "net/http" "strings" "github.com/gin-gonic/gin" "github.com/novablog/server/internal/utils" ) // AuthMiddleware JWT 认证中间件 func AuthMiddleware(jwtManager *utils.JWTManager) gin.HandlerFunc { return func(c *gin.Context) { // 从 Header 获取 Token authHeader := c.GetHeader("Authorization") if authHeader == "" { c.JSON(http.StatusUnauthorized, gin.H{ "error": "authorization header is required", }) c.Abort() return } // 解析 Bearer Token parts := strings.SplitN(authHeader, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { c.JSON(http.StatusUnauthorized, gin.H{ "error": "invalid authorization header format", }) c.Abort() return } tokenString := parts[1] // 验证 Token claims, err := jwtManager.ParseToken(tokenString) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{ "error": err.Error(), }) c.Abort() return } // 将用户信息存入上下文 c.Set("userID", claims.UserID) c.Set("username", claims.Username) c.Set("role", claims.Role) c.Next() } } // AdminMiddleware 管理员权限中间件 func AdminMiddleware() gin.HandlerFunc { return func(c *gin.Context) { role, exists := c.Get("role") if !exists || role != "admin" { c.JSON(http.StatusForbidden, gin.H{ "error": "admin permission required", }) c.Abort() return } c.Next() } } // GetUserID 从上下文获取用户 ID func GetUserID(c *gin.Context) (uint, bool) { userID, exists := c.Get("userID") if !exists { return 0, false } return userID.(uint), true } // GetUsername 从上下文获取用户名 func GetUsername(c *gin.Context) (string, bool) { username, exists := c.Get("username") if !exists { return "", false } return username.(string), true }