This commit is contained in:
toom1996
2026-09-07 00:01:48 +08:00
parent b049104a0b
commit 74ba700598
31 changed files with 1113 additions and 606 deletions

View File

@ -16,8 +16,19 @@ import (
const (
ContextUserID = "userID"
ContextUsername = "username"
// ContextTier 存放用户等级(free/vip),供详情接口据其拼装普通/高清图。
ContextTier = "tier"
)
// TierFree / TierVIP 用户等级枚举值。
const (
TierFree = "free"
TierVIP = "vip"
)
// IsVIP 判断等级是否为 VIP。
func IsVIP(tier string) bool { return tier == TierVIP }
// bearerPrefix Authorization 头的令牌前缀。
const bearerPrefix = "Bearer "
@ -46,6 +57,7 @@ func requireAuth(c *gin.Context, manager *jwt.Manager) {
c.Set(ContextUserID, claims.UserID)
c.Set(ContextUsername, claims.Username)
c.Set(ContextTier, claims.Tier)
c.Next()
}
@ -65,6 +77,7 @@ func PublicFirstPageAuth(manager *jwt.Manager) gin.HandlerFunc {
if claims, err := manager.Parse(strings.TrimPrefix(header, bearerPrefix)); err == nil {
c.Set(ContextUserID, claims.UserID)
c.Set(ContextUsername, claims.Username)
c.Set(ContextTier, claims.Tier)
}
}
// 非首页:必须有有效 token,否则 401。
@ -92,3 +105,13 @@ func UserIDFrom(c *gin.Context) (uint32, bool) {
}
return id, true
}
// TierFrom 从 Context 取出当前用户等级;未登录(无 tier)回落 free。
func TierFrom(c *gin.Context) string {
if v, exists := c.Get(ContextTier); exists {
if t, ok := v.(string); ok && t != "" {
return t
}
}
return TierFree
}