mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-02-03 02:54:41 +08:00
196 lines
4.1 KiB
Go
196 lines
4.1 KiB
Go
// Package contexts
|
||
// @Link https://github.com/bufanyun/hotgo
|
||
// @Copyright Copyright (c) 2023 HotGo CLI
|
||
// @Author Ms <133814250@qq.com>
|
||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||
package contexts
|
||
|
||
import (
|
||
"context"
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
"github.com/gogf/gf/v2/net/ghttp"
|
||
"hotgo/internal/consts"
|
||
"hotgo/internal/model"
|
||
)
|
||
|
||
// Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改
|
||
func Init(r *ghttp.Request, customCtx *model.Context) {
|
||
r.SetCtxVar(consts.ContextHTTPKey, customCtx)
|
||
}
|
||
|
||
// Get 获得上下文变量,如果没有设置,那么返回nil
|
||
func Get(ctx context.Context) *model.Context {
|
||
value := ctx.Value(consts.ContextHTTPKey)
|
||
if value == nil {
|
||
return nil
|
||
}
|
||
if localCtx, ok := value.(*model.Context); ok {
|
||
return localCtx
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// SetUser 将上下文信息设置到上下文请求中,注意是完整覆盖
|
||
func SetUser(ctx context.Context, user *model.Identity) {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
g.Log().Warning(ctx, "contexts.SetUser, c == nil ")
|
||
return
|
||
}
|
||
c.User = user
|
||
}
|
||
|
||
// SetResponse 设置组件响应 用于访问日志使用
|
||
func SetResponse(ctx context.Context, response *model.Response) {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
g.Log().Warning(ctx, "contexts.SetResponse, c == nil ")
|
||
return
|
||
}
|
||
c.Response = response
|
||
}
|
||
|
||
// SetModule 设置应用模块
|
||
func SetModule(ctx context.Context, module string) {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
g.Log().Warning(ctx, "contexts.SetModule, c == nil ")
|
||
return
|
||
}
|
||
c.Module = module
|
||
}
|
||
|
||
// GetUser 获取用户信息
|
||
func GetUser(ctx context.Context) *model.Identity {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
return nil
|
||
}
|
||
return c.User
|
||
}
|
||
|
||
// GetUserId 获取用户ID
|
||
func GetUserId(ctx context.Context) int64 {
|
||
user := GetUser(ctx)
|
||
if user == nil {
|
||
return 0
|
||
}
|
||
return user.Id
|
||
}
|
||
|
||
// GetRoleId 获取用户角色ID
|
||
func GetRoleId(ctx context.Context) int64 {
|
||
user := GetUser(ctx)
|
||
if user == nil {
|
||
return 0
|
||
}
|
||
return user.RoleId
|
||
}
|
||
|
||
// GetRoleKey 获取用户角色唯一编码
|
||
func GetRoleKey(ctx context.Context) string {
|
||
user := GetUser(ctx)
|
||
if user == nil {
|
||
return ""
|
||
}
|
||
return user.RoleKey
|
||
}
|
||
|
||
// GetDeptType 获取用户部门类型
|
||
func GetDeptType(ctx context.Context) string {
|
||
user := GetUser(ctx)
|
||
if user == nil {
|
||
return ""
|
||
}
|
||
return user.DeptType
|
||
}
|
||
|
||
// IsCompanyDept 是否为公司部门
|
||
func IsCompanyDept(ctx context.Context) bool {
|
||
return GetDeptType(ctx) == consts.DeptTypeCompany
|
||
}
|
||
|
||
// IsTenantDept 是否为租户部门
|
||
func IsTenantDept(ctx context.Context) bool {
|
||
return GetDeptType(ctx) == consts.DeptTypeTenant
|
||
}
|
||
|
||
// IsMerchantDept 是否为商户部门
|
||
func IsMerchantDept(ctx context.Context) bool {
|
||
return GetDeptType(ctx) == consts.DeptTypeMerchant
|
||
}
|
||
|
||
// IsUserDept 是否为普通用户部门
|
||
func IsUserDept(ctx context.Context) bool {
|
||
return GetDeptType(ctx) == consts.DeptTypeUser
|
||
}
|
||
|
||
// GetModule 获取应用模块
|
||
func GetModule(ctx context.Context) string {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
return ""
|
||
}
|
||
return c.Module
|
||
}
|
||
|
||
// SetAddonName 设置插件信息
|
||
func SetAddonName(ctx context.Context, name string) {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
g.Log().Warning(ctx, "contexts.SetAddonName, c == nil ")
|
||
return
|
||
}
|
||
Get(ctx).AddonName = name
|
||
}
|
||
|
||
// IsAddonRequest 是否为插件模块请求
|
||
func IsAddonRequest(ctx context.Context) bool {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
return false
|
||
}
|
||
return GetAddonName(ctx) != ""
|
||
}
|
||
|
||
// GetAddonName 获取插件信息
|
||
func GetAddonName(ctx context.Context) string {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
return ""
|
||
}
|
||
return Get(ctx).AddonName
|
||
}
|
||
|
||
// SetData 设置额外数据
|
||
func SetData(ctx context.Context, k string, v interface{}) {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
g.Log().Warning(ctx, "contexts.SetData, c == nil ")
|
||
return
|
||
}
|
||
Get(ctx).Data[k] = v
|
||
}
|
||
|
||
// SetDataMap 设置额外数据
|
||
func SetDataMap(ctx context.Context, vs g.Map) {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
g.Log().Warning(ctx, "contexts.SetData, c == nil ")
|
||
return
|
||
}
|
||
|
||
for k, v := range vs {
|
||
Get(ctx).Data[k] = v
|
||
}
|
||
}
|
||
|
||
// GetData 获取额外数据
|
||
func GetData(ctx context.Context) g.Map {
|
||
c := Get(ctx)
|
||
if c == nil {
|
||
return nil
|
||
}
|
||
return c.Data
|
||
}
|