feat: 中间件多语言
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"ems.agt/src/framework/constants/common"
|
"ems.agt/src/framework/constants/common"
|
||||||
|
"ems.agt/src/framework/i18n"
|
||||||
"ems.agt/src/framework/utils/ctx"
|
"ems.agt/src/framework/utils/ctx"
|
||||||
"ems.agt/src/framework/utils/parse"
|
"ems.agt/src/framework/utils/parse"
|
||||||
"ems.agt/src/framework/vo/result"
|
"ems.agt/src/framework/vo/result"
|
||||||
@@ -96,6 +97,7 @@ var maskProperties []string = []string{
|
|||||||
func OperateLog(options Options) gin.HandlerFunc {
|
func OperateLog(options Options) gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
c.Set("startTime", time.Now())
|
c.Set("startTime", time.Now())
|
||||||
|
language := ctx.AcceptLanguage(c)
|
||||||
|
|
||||||
// 函数名
|
// 函数名
|
||||||
funcName := c.HandlerName()
|
funcName := c.HandlerName()
|
||||||
@@ -108,7 +110,7 @@ func OperateLog(options Options) gin.HandlerFunc {
|
|||||||
// 获取登录用户信息
|
// 获取登录用户信息
|
||||||
loginUser, err := ctx.LoginUser(c)
|
loginUser, err := ctx.LoginUser(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(401, result.CodeMsg(401, "无效身份授权"))
|
c.JSON(401, result.CodeMsg(401, i18n.TKey(language, err.Error())))
|
||||||
c.Abort() // 停止执行后续的处理函数
|
c.Abort() // 停止执行后续的处理函数
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
AdminConstants "ems.agt/src/framework/constants/admin"
|
AdminConstants "ems.agt/src/framework/constants/admin"
|
||||||
commonConstants "ems.agt/src/framework/constants/common"
|
commonConstants "ems.agt/src/framework/constants/common"
|
||||||
|
"ems.agt/src/framework/i18n"
|
||||||
ctxUtils "ems.agt/src/framework/utils/ctx"
|
ctxUtils "ems.agt/src/framework/utils/ctx"
|
||||||
tokenUtils "ems.agt/src/framework/utils/token"
|
tokenUtils "ems.agt/src/framework/utils/token"
|
||||||
"ems.agt/src/framework/vo/result"
|
"ems.agt/src/framework/vo/result"
|
||||||
@@ -23,10 +22,12 @@ import (
|
|||||||
// 同时匹配其中权限 "matchPerms": {"xxx"},
|
// 同时匹配其中权限 "matchPerms": {"xxx"},
|
||||||
func PreAuthorize(options map[string][]string) gin.HandlerFunc {
|
func PreAuthorize(options map[string][]string) gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
|
language := ctxUtils.AcceptLanguage(c)
|
||||||
|
|
||||||
// 获取请求头标识信息
|
// 获取请求头标识信息
|
||||||
tokenStr := ctxUtils.Authorization(c)
|
tokenStr := ctxUtils.Authorization(c)
|
||||||
if tokenStr == "" {
|
if tokenStr == "" {
|
||||||
c.JSON(401, result.CodeMsg(401, "无效身份授权"))
|
c.JSON(401, result.CodeMsg(401, i18n.TKey(language, "app.common.err401")))
|
||||||
c.Abort() // 停止执行后续的处理函数
|
c.Abort() // 停止执行后续的处理函数
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -42,7 +43,7 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc {
|
|||||||
// 获取缓存的用户信息
|
// 获取缓存的用户信息
|
||||||
loginUser := tokenUtils.LoginUser(claims)
|
loginUser := tokenUtils.LoginUser(claims)
|
||||||
if loginUser.UserID == "" {
|
if loginUser.UserID == "" {
|
||||||
c.JSON(401, result.CodeMsg(401, "无效身份授权"))
|
c.JSON(401, result.CodeMsg(401, i18n.TKey(language, "app.common.err401")))
|
||||||
c.Abort() // 停止执行后续的处理函数
|
c.Abort() // 停止执行后续的处理函数
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -60,7 +61,7 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc {
|
|||||||
perms := loginUser.Permissions
|
perms := loginUser.Permissions
|
||||||
verifyOk := verifyRolePermission(roles, perms, options)
|
verifyOk := verifyRolePermission(roles, perms, options)
|
||||||
if !verifyOk {
|
if !verifyOk {
|
||||||
msg := fmt.Sprintf("无权访问 %s %s", c.Request.Method, c.Request.RequestURI)
|
msg := i18n.TTemplate(language, "app.common.err403", map[string]any{"method": c.Request.Method, "requestURI": c.Request.RequestURI})
|
||||||
c.JSON(403, result.CodeMsg(403, msg))
|
c.JSON(403, result.CodeMsg(403, msg))
|
||||||
c.Abort() // 停止执行后续的处理函数
|
c.Abort() // 停止执行后续的处理函数
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"ems.agt/src/framework/constants/cachekey"
|
"ems.agt/src/framework/constants/cachekey"
|
||||||
|
"ems.agt/src/framework/i18n"
|
||||||
"ems.agt/src/framework/redis"
|
"ems.agt/src/framework/redis"
|
||||||
"ems.agt/src/framework/utils/ctx"
|
"ems.agt/src/framework/utils/ctx"
|
||||||
"ems.agt/src/framework/utils/ip2region"
|
"ems.agt/src/framework/utils/ip2region"
|
||||||
@@ -42,6 +43,8 @@ type LimitOption struct {
|
|||||||
// 以便获取登录用户信息,无用户信息时默认为 GLOBAL
|
// 以便获取登录用户信息,无用户信息时默认为 GLOBAL
|
||||||
func RateLimit(option LimitOption) gin.HandlerFunc {
|
func RateLimit(option LimitOption) gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
|
language := ctx.AcceptLanguage(c)
|
||||||
|
|
||||||
// 初始可选参数数据
|
// 初始可选参数数据
|
||||||
if option.Time < 5 {
|
if option.Time < 5 {
|
||||||
option.Time = 5
|
option.Time = 5
|
||||||
@@ -66,7 +69,7 @@ func RateLimit(option LimitOption) gin.HandlerFunc {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(401, result.Err(map[string]any{
|
c.JSON(401, result.Err(map[string]any{
|
||||||
"code": 401,
|
"code": 401,
|
||||||
"msg": err.Error(),
|
"msg": i18n.TKey(language, err.Error()),
|
||||||
}))
|
}))
|
||||||
c.Abort() // 停止执行后续的处理函数
|
c.Abort() // 停止执行后续的处理函数
|
||||||
return
|
return
|
||||||
@@ -91,7 +94,7 @@ func RateLimit(option LimitOption) gin.HandlerFunc {
|
|||||||
|
|
||||||
if rateCount >= option.Count {
|
if rateCount >= option.Count {
|
||||||
// 访问过于频繁,请稍候再试
|
// 访问过于频繁,请稍候再试
|
||||||
c.JSON(200, result.ErrMsg("Visits are too frequent. Please try again later"))
|
c.JSON(200, i18n.TKey(language, "app.common.rateLimitTip"))
|
||||||
c.Abort() // 停止执行后续的处理函数
|
c.Abort() // 停止执行后续的处理函数
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user