优化用户模型和模块租户检查逻辑,新增NATS消息配置和MongoDB缓存控制
This commit is contained in:
@@ -66,8 +66,18 @@ func GetMonthToday(t time.Time, month int) time.Time {
|
||||
}
|
||||
|
||||
func GetUserInfo(ctx context.Context) (user beans.User, err error) {
|
||||
r := g.RequestFromCtx(ctx)
|
||||
if r != nil {
|
||||
// 检查context是否已取消
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return user, ctx.Err()
|
||||
default:
|
||||
}
|
||||
|
||||
if !g.IsNil(ctx.Value("id")) || !g.IsNil(ctx.Value("userName")) || !g.IsNil(ctx.Value("tenantId")) {
|
||||
user.UserId = ctx.Value("id")
|
||||
user.UserName = ctx.Value("userName")
|
||||
user.TenantId = ctx.Value("tenantId")
|
||||
} else {
|
||||
redisAddr := g.Cfg().MustGet(ctx, "redis.default.address").String()
|
||||
gft := gftoken.NewGfToken(
|
||||
gftoken.WithCacheKey("gfToken:"),
|
||||
@@ -79,34 +89,47 @@ func GetUserInfo(ctx context.Context) (user beans.User, err error) {
|
||||
Address: redisAddr,
|
||||
Db: 1,
|
||||
}))
|
||||
// 解析 token
|
||||
data, err := gft.ParseToken(g.RequestFromCtx(ctx))
|
||||
if err != nil {
|
||||
return user, gerror.Wrap(err, "token 解析失败")
|
||||
var data *gftoken.CustomClaims
|
||||
|
||||
if !g.IsNil(ctx.Value("token")) {
|
||||
var tokenData *gftoken.TokenData
|
||||
tokenData, _, err = gft.GetTokenData(ctx, ctx.Value("token").(string))
|
||||
if err != nil {
|
||||
return user, gerror.Wrap(err, "token 解析失败")
|
||||
}
|
||||
var code int
|
||||
if data, code = gft.IsNotExpired(tokenData.JwtToken); code != gftoken.JwtTokenOK {
|
||||
return user, gerror.New("token jwt 解析失败")
|
||||
}
|
||||
} else if g.RequestFromCtx(ctx) != nil {
|
||||
// 解析 token
|
||||
data, err = gft.ParseToken(g.RequestFromCtx(ctx))
|
||||
if err != nil {
|
||||
return user, gerror.Wrap(err, "token 解析失败")
|
||||
}
|
||||
}
|
||||
|
||||
// 检查 data 是否为 nil
|
||||
if data == nil {
|
||||
return user, gerror.New("token 数据为空")
|
||||
}
|
||||
|
||||
// 检查 data.Data 是否为 nil
|
||||
if data.Data == nil {
|
||||
g.Log().Errorf(ctx, "data.Data 为空")
|
||||
return user, gerror.New("用户信息为空")
|
||||
}
|
||||
|
||||
dataMap := gconv.Map(data.Data)
|
||||
user.UserId = dataMap["id"]
|
||||
user.UserName = dataMap["userName"]
|
||||
user.TenantId = dataMap["tenantId"]
|
||||
} else {
|
||||
user.TenantId = ctx.Value("tenantId")
|
||||
user.UserName = ctx.Value("userName")
|
||||
}
|
||||
if user.TenantId == nil {
|
||||
|
||||
if g.IsNil(user.UserId) && g.IsNil(user.UserName) && g.IsNil(user.TenantId) {
|
||||
return user, gerror.New("租户信息为空")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func SetValue(ctx context.Context, result any, key string, value any) {
|
||||
// 检查context是否已取消
|
||||
select {
|
||||
@@ -207,6 +230,13 @@ func FormatUnixTime(timestamp int64) string {
|
||||
|
||||
// ParseDurationWithDefault 解析持续时间,失败时使用默认值 - 通用时间处理工具
|
||||
func ParseDurationWithDefault(ctx context.Context, durationStr, defaultStr, fieldName string) (time.Duration, string) {
|
||||
// 检查context是否已取消
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return 0, ""
|
||||
default:
|
||||
}
|
||||
|
||||
durationParsed, err := time.ParseDuration(durationStr)
|
||||
if err != nil {
|
||||
// 这里不能直接使用g.Log(),因为这是utils包,没有直接的日志访问
|
||||
@@ -303,7 +333,7 @@ func Struct(params any, pointer any) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = json.Unmarshal(b, &pointer)
|
||||
err = json.Unmarshal(b, pointer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user