package middleware import ( "strings" "github.com/gin-gonic/gin" "github.com/sundynix/pets-be/pkg/errcode" appjwt "github.com/sundynix/pets-be/pkg/jwt" "github.com/sundynix/pets-be/pkg/response" ) // gin.Context 中存放身份的 key const ( CtxUserID = "userID" CtxAdminID = "adminID" CtxName = "name" ) func bearer(c *gin.Context) string { h := c.GetHeader("Authorization") if h == "" { return "" } if strings.HasPrefix(h, "Bearer ") { return strings.TrimPrefix(h, "Bearer ") } return h } // AuthUser 小程序用户鉴权 func AuthUser(jm *appjwt.Manager) gin.HandlerFunc { return func(c *gin.Context) { claims, err := jm.Parse(bearer(c)) if err != nil || claims.Kind != appjwt.KindUser { response.Abort(c, errcode.ErrUnauthized, "") return } c.Set(CtxUserID, claims.ID) c.Set(CtxName, claims.Name) c.Next() } } // AuthAdmin 后台管理员鉴权 func AuthAdmin(jm *appjwt.Manager) gin.HandlerFunc { return func(c *gin.Context) { claims, err := jm.Parse(bearer(c)) if err != nil || claims.Kind != appjwt.KindAdmin { response.Abort(c, errcode.ErrUnauthized, "") return } c.Set(CtxAdminID, claims.ID) c.Set(CtxName, claims.Name) c.Next() } } // UserID 从上下文取当前用户 ID func UserID(c *gin.Context) uint { if v, ok := c.Get(CtxUserID); ok { if id, ok := v.(uint); ok { return id } } return 0 } // AdminID 从上下文取当前管理员 ID func AdminID(c *gin.Context) uint { if v, ok := c.Get(CtxAdminID); ok { if id, ok := v.(uint); ok { return id } } return 0 }