wz-golang-server/server/middleware/tenant.go

30 lines
563 B
Go

package middleware
import (
"context"
"server/common"
"github.com/gin-gonic/gin"
)
// TenantMiddleware 解析租户ID并绑定到请求上下文
func TenantMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
tenantID := common.TenantIDFromHeader(c.GetHeader)
ctx := c.Request.Context()
if tenantID != "" {
ctx = context.WithValue(ctx, common.ContextTenantIDKey, tenantID)
}
cleanup := common.BindRequestContext(ctx)
defer cleanup()
if ctx != c.Request.Context() {
c.Request = c.Request.WithContext(ctx)
}
c.Next()
}
}