package middleware import ( "net/http" "strings" "software-download-center/utils" "github.com/gin-gonic/gin" ) // AuthMiddleware 认证中间件 func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // 从请求头获取 token authHeader := c.GetHeader("Authorization") if authHeader == "" { // 尝试从 cookie 获取 token, err := c.Cookie("token") if err != nil || token == "" { c.JSON(http.StatusUnauthorized, gin.H{ "error": "未授权,请先登录", }) c.Abort() return } authHeader = "Bearer " + token } // 提取 token parts := strings.SplitN(authHeader, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { c.JSON(http.StatusUnauthorized, gin.H{ "error": "无效的认证格式", }) c.Abort() return } token := parts[1] // 解析 token claims, err := utils.ParseToken(token) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{ "error": "无效的 token", }) c.Abort() return } // 将用户信息存储到上下文 c.Set("user_id", claims.UserID) c.Set("username", claims.Username) c.Set("is_admin", claims.IsAdmin) c.Next() } } // AdminMiddleware 管理员中间件 func AdminMiddleware() gin.HandlerFunc { return func(c *gin.Context) { isAdmin, exists := c.Get("is_admin") if !exists || !isAdmin.(bool) { c.JSON(http.StatusForbidden, gin.H{ "error": "需要管理员权限", }) c.Abort() return } c.Next() } }