[优化] 更新kit包

This commit is contained in:
PandaGoAdmin
2022-08-19 21:54:57 +08:00
parent cf97d854d8
commit 915bc15bae
14 changed files with 162 additions and 22 deletions

70
pkg/middleware/log.go Normal file
View File

@@ -0,0 +1,70 @@
package middleware
import (
"encoding/json"
"fmt"
"github.com/XM-GO/PandaKit/biz"
"github.com/XM-GO/PandaKit/logger"
"github.com/XM-GO/PandaKit/restfulx"
"github.com/XM-GO/PandaKit/utils"
"github.com/sirupsen/logrus"
"reflect"
"runtime/debug"
)
func LogHandler(rc *restfulx.ReqCtx) error {
li := rc.LogInfo
if li == nil {
return nil
}
lfs := logrus.Fields{}
if la := rc.LoginAccount; la != nil {
lfs["uid"] = la.UserId
lfs["uname"] = la.UserName
}
req := rc.Request.Request
lfs[req.Method] = req.URL.Path
if err := rc.Err; err != nil {
logger.Log.WithFields(lfs).Error(getErrMsg(rc, err))
return nil
}
logger.Log.WithFields(lfs).Info(getLogMsg(rc))
return nil
}
func getLogMsg(rc *restfulx.ReqCtx) string {
msg := rc.LogInfo.Description + fmt.Sprintf(" ->%dms", rc.Timed)
if !utils.IsBlank(reflect.ValueOf(rc.ReqParam)) {
rb, _ := json.Marshal(rc.ReqParam)
msg = msg + fmt.Sprintf("\n--> %s", string(rb))
}
// 返回结果不为空,则记录返回结果
if rc.LogInfo.LogResp && !utils.IsBlank(reflect.ValueOf(rc.ResData)) {
respB, _ := json.Marshal(rc.ResData)
msg = msg + fmt.Sprintf("\n<-- %s", string(respB))
}
return msg
}
func getErrMsg(rc *restfulx.ReqCtx, err any) string {
msg := rc.LogInfo.Description
if !utils.IsBlank(reflect.ValueOf(rc.ReqParam)) {
rb, _ := json.Marshal(rc.ReqParam)
msg = msg + fmt.Sprintf("\n--> %s", string(rb))
}
var errMsg string
switch t := err.(type) {
case *biz.BizError:
errMsg = fmt.Sprintf("\n<-e errCode: %d, errMsg: %s", t.Code(), t.Error())
case error:
errMsg = fmt.Sprintf("\n<-e errMsg: %s\n%s", t.Error(), string(debug.Stack()))
case string:
errMsg = fmt.Sprintf("\n<-e errMsg: %s\n%s", t, string(debug.Stack()))
}
return (msg + errMsg)
}

View File

@@ -0,0 +1,48 @@
package middleware
import (
"github.com/XM-GO/PandaKit/biz"
"github.com/XM-GO/PandaKit/casbin"
"github.com/XM-GO/PandaKit/restfulx"
"github.com/XM-GO/PandaKit/token"
"github.com/dgrijalva/jwt-go"
"pandax/pkg/global"
"strconv"
)
func PermissionHandler(rc *restfulx.ReqCtx) error {
permission := rc.RequiredPermission
// 如果需要的权限信息不为空并且不需要token则不返回错误继续后续逻辑
if permission != nil && !permission.NeedToken {
return nil
}
tokenStr := rc.Request.Request.Header.Get("X-TOKEN")
// header不存在则从查询参数token中获取
if tokenStr == "" {
tokenStr = rc.Request.QueryParameter("token")
}
if tokenStr == "" {
return biz.PermissionErr
}
j := token.NewJWT("", []byte(global.Conf.Jwt.Key), jwt.SigningMethodHS256)
loginAccount, err := j.ParseToken(tokenStr)
if err != nil || loginAccount == nil {
return biz.PermissionErr
}
rc.LoginAccount = loginAccount
if !permission.NeedCasbin {
return nil
}
ca := casbin.CasbinS{ModelPath: global.Conf.Casbin.ModelPath}
e := ca.Casbin()
// 判断策略中是否存在
tenantId := strconv.Itoa(int(rc.LoginAccount.TenantId))
success, err := e.Enforce(tenantId, loginAccount.RoleKey, rc.Request.Request.URL.Path, rc.Request.Request.Method)
if !success {
return biz.CasbinErr
}
return nil
}