package httpx import ( "net/http" "strings" "github.com/gin-gonic/gin" adminlogic "spark-server/internal/module/admin/logic" adminhandler "spark-server/internal/transport/http/handler/admin" ) const adminClaimsKey = "adminClaims" func AdminAuth(tokens *adminlogic.TokenService) gin.HandlerFunc { return func(c *gin.Context) { if tokens == nil { adminhandler.Fail(c, http.StatusServiceUnavailable, "admin JWT 未配置") c.Abort() return } raw, ok := bearerToken(c.GetHeader(headerAuthorization)) if !ok { adminhandler.Fail(c, http.StatusUnauthorized, "未登录") c.Abort() return } claims, err := tokens.Parse(raw) if err != nil { adminhandler.Fail(c, http.StatusUnauthorized, "登录已失效") c.Abort() return } c.Set(adminClaimsKey, claims) c.Next() } } func adminPath(path string) bool { return strings.HasPrefix(path, "/api/admin/") }