- 修复: WebSocket OnlineUserMap 加锁, aliasCronMap 改用 sync.Map - 修复: 替换 dgrijalva/jwt-go 为 golang-jwt/jwt (CVE) - 修复: CronJob.Add 缺少 return, resp.ErrorResp 未处理 error 类型 - 修复: token_util 和 login_service 越界访问 - 修复: Logger 级别配置被代码覆盖 - 修复: SysConfig.ConfigValue 字段长度 varchar(1) -> varchar(500) - 修复: Excel 导出列超过26列崩溃 - 修复: 数据库连接池配置过大, Ping goroutine 泄漏 - 修复: config_dao init 绕过缓存层 - 修复: Redis 空值导致 JSON 解析 panic - 修复: 分配角色页面只返回用户已有角色, 未返回所有角色 - 修复: 用户列表因角色关联导致重复行 - 移除: 前端硬编码私钥和默认密码 - 修复: LoginBody 和 updateAuthRole 路径
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package util
|
|
|
|
import (
|
|
"cutego/modules/core/api/v1/response"
|
|
"cutego/modules/core/dataobject"
|
|
"cutego/pkg/config"
|
|
"cutego/pkg/jwt"
|
|
"cutego/pkg/logger"
|
|
"cutego/refs"
|
|
"github.com/gin-gonic/gin"
|
|
"strings"
|
|
)
|
|
|
|
type UserUtils struct {
|
|
}
|
|
|
|
// GetUserInfo 通过jwt获取当前登录用户
|
|
func GetUserInfo(c *gin.Context) *response.UserResponse {
|
|
token := c.Request.Header.Get("Authorization")
|
|
s := strings.Split(token, " ")
|
|
if len(s) < 2 {
|
|
logger.SugaredLogger.Errorln("token格式错误: ", token)
|
|
return nil
|
|
}
|
|
// parseToken 解析token包含的信息
|
|
claims, err := jwt.ParseToken(s[1])
|
|
if err != nil {
|
|
logger.SugaredLogger.Errorln(err)
|
|
}
|
|
if claims == nil {
|
|
return nil
|
|
}
|
|
info := claims.UserInfo
|
|
return &info
|
|
}
|
|
|
|
// CheckLockToken 校验多终端登录锁
|
|
func CheckLockToken(c *gin.Context) bool {
|
|
if config.AppEnvConfig.Login.Single {
|
|
// 获取redis中的token数据
|
|
info := GetUserInfo(c)
|
|
if info == nil {
|
|
return false
|
|
}
|
|
get, err := refs.RedisDB.GET(info.UserName)
|
|
if err != nil {
|
|
logger.SugaredLogger.Errorln(err)
|
|
return false
|
|
}
|
|
token := c.Request.Header.Get(config.AppEnvConfig.Jwt.Header)
|
|
s := strings.Split(token, " ")
|
|
if len(s) < 2 {
|
|
logger.SugaredLogger.Errorln("token格式错误: ", token)
|
|
return false
|
|
}
|
|
if get == s[1] {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// CheckIsAdmin 判断是否是超级管理员
|
|
func CheckIsAdmin(user *dataobject.SysUser) bool {
|
|
if user.UserId == 1 {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|