30 lines
563 B
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()
|
|
}
|
|
}
|