You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
3 years ago
|
/*
|
||
|
* @desc:context-service
|
||
|
* @company:云南奇讯科技有限公司
|
||
|
* @Author: yixiaohu
|
||
|
* @Date: 2022/3/16 14:46
|
||
|
*/
|
||
|
|
||
|
package service
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/gogf/gf/v2/net/ghttp"
|
||
|
"tyj_admin/internal/consts"
|
||
|
"tyj_admin/internal/model"
|
||
|
)
|
||
|
|
||
|
type IContext interface {
|
||
|
Init(r *ghttp.Request, customCtx *model.Context)
|
||
|
Get(ctx context.Context) *model.Context
|
||
|
SetUser(ctx context.Context, ctxUser *model.ContextUser)
|
||
|
GetLoginUser(ctx context.Context) *model.ContextUser
|
||
|
GetUserId(ctx context.Context) uint64
|
||
|
}
|
||
|
|
||
|
// Context 上下文管理服务
|
||
|
var contextService = contextServiceImpl{}
|
||
|
|
||
|
type contextServiceImpl struct{}
|
||
|
|
||
|
func Context() IContext {
|
||
|
return &contextService
|
||
|
}
|
||
|
|
||
|
// Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改。
|
||
|
func (s *contextServiceImpl) Init(r *ghttp.Request, customCtx *model.Context) {
|
||
|
r.SetCtxVar(consts.CtxKey, customCtx)
|
||
|
}
|
||
|
|
||
|
// Get 获得上下文变量,如果没有设置,那么返回nil
|
||
|
func (s *contextServiceImpl) Get(ctx context.Context) *model.Context {
|
||
|
value := ctx.Value(consts.CtxKey)
|
||
|
if value == nil {
|
||
|
return nil
|
||
|
}
|
||
|
if localCtx, ok := value.(*model.Context); ok {
|
||
|
return localCtx
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// SetUser 将上下文信息设置到上下文请求中,注意是完整覆盖
|
||
|
func (s *contextServiceImpl) SetUser(ctx context.Context, ctxUser *model.ContextUser) {
|
||
|
s.Get(ctx).User = ctxUser
|
||
|
}
|
||
|
|
||
|
// GetLoginUser 获取当前登陆用户信息
|
||
|
func (s *contextServiceImpl) GetLoginUser(ctx context.Context) *model.ContextUser {
|
||
|
context := s.Get(ctx)
|
||
|
if context == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return context.User
|
||
|
}
|
||
|
|
||
|
// GetUserId 获取当前登录用户id
|
||
|
func (s *contextServiceImpl) GetUserId(ctx context.Context) uint64 {
|
||
|
user := s.GetLoginUser(ctx)
|
||
|
if user != nil {
|
||
|
return user.Id
|
||
|
}
|
||
|
return 0
|
||
|
}
|