package middleware import ( "strings" "github.com/gin-gonic/gin" "portal-mini-go/internal/pkg/errors" "portal-mini-go/internal/pkg/token" ) const adminIDCtxKey = "admin_id" // AdminAuth 校验后台请求的 Bearer JWT,校验通过后将 admin_id 注入 context。 func AdminAuth(jwtSecret string) gin.HandlerFunc { return func(c *gin.Context) { auth := c.GetHeader("Authorization") const prefix = "Bearer " if !strings.HasPrefix(auth, prefix) { c.Error(errors.ErrUnauthorized) c.Abort() return } claims, err := token.Parse(jwtSecret, strings.TrimPrefix(auth, prefix)) if err != nil { c.Error(errors.ErrUnauthorized) c.Abort() return } c.Set(adminIDCtxKey, claims.AdminID) c.Next() } } // AdminID 从 gin.Context 取出已认证的后台管理员 ID。 func AdminID(c *gin.Context) string { if v, ok := c.Get(adminIDCtxKey); ok { if s, ok := v.(string); ok { return s } } return "" }