user_token.go 1.3 KB
package contextdata

import (
	"context"
	"encoding/json"
	"fmt"
	"github.com/zeromicro/go-zero/core/logx"
	"strconv"
	"strings"
)

var (
	CtxKeyJwtUserId     = "UserId"
	CtxKeyJwtCompanyId  = "CompanyId"
	CtxKeyJwtEmployeeId = "EmployeeId"
)

func GetInt64FromCtx(ctx context.Context, key string) int64 {
	var uid int64
	if value := ctx.Value(key); value != nil {
		valueStr := strings.Trim(fmt.Sprintf("%v", value), `"`)
		i64, err := strconv.ParseFloat(valueStr, 64)
		if err != nil {
			logx.WithContext(ctx).Errorf("GetUidFromCtx err : %+v", err)
		}
		uid = int64(i64)
		return uid
	}
	return uid
}

func getStringFromCtx(ctx context.Context, key string) string {
	var uid string
	if jsonUid, ok := ctx.Value(key).(string); ok {
		return jsonUid
	}
	return uid
}

func getArrayInt64FromCtx(ctx context.Context, key string) []int64 {
	values := ctx.Value(key)
	var ids = make([]int64, 0)
	if values == nil {
		return ids
	}
	if list, ok := values.([]interface{}); ok {
		for _, item := range list {
			if jsonId, ok := item.(json.Number); ok {
				id, _ := jsonId.Int64()
				ids = append(ids, id)
			}
		}
	}
	return ids
}

func GetUserTokenFromCtx(ctx context.Context) UserToken {
	return UserToken{
		UserId:     GetInt64FromCtx(ctx, CtxKeyJwtUserId),
		CompanyId:  GetInt64FromCtx(ctx, CtxKeyJwtCompanyId),
		EmployeeId: GetInt64FromCtx(ctx, CtxKeyJwtEmployeeId),
	}
}