feat: 合并Gin_Vue

This commit is contained in:
TsMask
2023-10-16 17:10:38 +08:00
parent 5289818fd4
commit 40a32cb67f
203 changed files with 19719 additions and 178 deletions

View File

@@ -10,6 +10,8 @@ import (
"ems.agt/lib/core/vo"
"ems.agt/lib/core/vo/result"
"ems.agt/lib/dborm"
commonConstants "ems.agt/src/framework/constants/common"
tokenUtils "ems.agt/src/framework/utils/token"
)
// Authorize 用户身份授权认证校验
@@ -25,30 +27,74 @@ func Authorize(options map[string][]string) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 获取请求头标识信息
tokenStr := ctx.Authorization(r)
// 获取请求头标识信息-旧头
accessToken := r.Header.Get("AccessToken")
if accessToken == "" {
if tokenStr == "" && accessToken != "" {
// 验证令牌 == 这里直接查数据库session
if !dborm.XormExistValidToken(accessToken, 0) {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization valid error"))
return
}
se, err := dborm.XormUpdateSessionShakeTime(accessToken)
if err != nil {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization shake error"))
return
}
// 获取缓存的用户信息
data, ok := cache.GetLocalTTL(se.AccountId)
if data == nil || !ok {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization info error"))
return
}
loginUser := data.(vo.LoginUser)
// 登录用户角色权限校验
if options != nil {
var roles []string
for _, item := range loginUser.User.Roles {
roles = append(roles, item.RoleKey)
}
perms := loginUser.Permissions
verifyOk := verifyRolePermission(roles, perms, options)
if !verifyOk {
msg := fmt.Sprintf("Unauthorized access %s %s", r.Method, r.RequestURI)
ctx.JSON(w, 403, result.CodeMsg(403, msg))
return
}
}
// 在请求的 Context 中存储数据
rContext := r.Context()
rContext = context.WithValue(rContext, ctx.ContextKey(commonConstants.CTX_LOGIN_USER), loginUser)
// 继续处理请求
next.ServeHTTP(w, r.WithContext(rContext))
return
}
// 获取请求头标识信息
if tokenStr == "" {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization token error"))
return
}
// 验证令牌 == 这里直接查数据库session
if !dborm.XormExistValidToken(accessToken, 0) {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization valid error"))
return
}
se, err := dborm.XormUpdateSessionShakeTime(accessToken)
// 验证令牌
claims, err := tokenUtils.Verify(tokenStr)
if err != nil {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization shake error"))
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization valid error"))
return
}
// 获取缓存的用户信息
data, ok := cache.GetLocalTTL(se.AccountId)
if data == nil || !ok {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization info error"))
loginUser := tokenUtils.LoginUser(claims)
if loginUser.UserID == "" {
ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization shake error"))
return
}
loginUser := data.(vo.LoginUser)
// 检查刷新有效期后存入上下文
tokenUtils.RefreshIn(&loginUser)
// 登录用户角色权限校验
if options != nil {
@@ -67,7 +113,7 @@ func Authorize(options map[string][]string) func(http.Handler) http.Handler {
// 在请求的 Context 中存储数据
rContext := r.Context()
rContext = context.WithValue(rContext, ctx.ContextKey("LoginUser"), loginUser)
rContext = context.WithValue(rContext, ctx.ContextKey(commonConstants.CTX_LOGIN_USER), loginUser)
// 继续处理请求
next.ServeHTTP(w, r.WithContext(rContext))
})

View File

@@ -6,6 +6,7 @@ import (
"ems.agt/lib/log"
"ems.agt/lib/services"
tokenConst "ems.agt/src/framework/constants/token"
"github.com/gorilla/mux"
)
@@ -22,6 +23,7 @@ func LoggerTrace(next http.Handler) http.Handler {
log.Trace(" User-Agent:", r.Header.Get("User-Agent"))
log.Trace(" Content-Type:", r.Header.Get("Content-Type"))
log.Trace(" AccessToken:", r.Header.Get("AccessToken"))
log.Trace(" Authorization:", r.Header.Get(tokenConst.HEADER_KEY))
log.Trace("Trace End=====")
//body, _ := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
// nop-close to ready r.Body !!!