提交 5acdef73 编写于 作者: J jinlan.du

Merge branch 'gin-vue-admin_v2_dev' of...

Merge branch 'gin-vue-admin_v2_dev' of https://github.com/flipped-aurora/gin-vue-admin into gin-vue-admin_v2_dev
...@@ -3,7 +3,6 @@ package v1 ...@@ -3,7 +3,6 @@ package v1
import ( import (
"fmt" "fmt"
"gin-vue-admin/global/response" "gin-vue-admin/global/response"
_ "gin-vue-admin/model/response"
resp "gin-vue-admin/model/response" resp "gin-vue-admin/model/response"
"gin-vue-admin/service" "gin-vue-admin/service"
"gin-vue-admin/utils" "gin-vue-admin/utils"
...@@ -29,34 +28,34 @@ func BreakpointContinue(c *gin.Context) { ...@@ -29,34 +28,34 @@ func BreakpointContinue(c *gin.Context) {
_, FileHeader, err := c.Request.FormFile("file") _, FileHeader, err := c.Request.FormFile("file")
if err != nil { if err != nil {
response.FailWithMessage(err.Error(), c) response.FailWithMessage(err.Error(), c)
} else { return
f, err := FileHeader.Open() }
if err != nil { f, err := FileHeader.Open()
response.FailWithMessage(err.Error(), c) if err != nil {
} else { response.FailWithMessage(err.Error(), c)
cen, _ := ioutil.ReadAll(f) return
defer f.Close() }
if flag := utils.CheckMd5(cen, chunkMd5); flag { defer f.Close()
err, file := service.FindOrCreateFile(fileMd5, fileName, chunkTotal) cen, _ := ioutil.ReadAll(f)
if err != nil { if flag := utils.CheckMd5(cen, chunkMd5); !flag {
response.FailWithMessage(err.Error(), c) return
} else { }
err, pathc := utils.BreakPointContinue(cen, fileName, chunkNumber, chunkTotal, fileMd5) err, file := service.FindOrCreateFile(fileMd5, fileName, chunkTotal)
if err != nil { if err != nil {
response.FailWithMessage(err.Error(), c) response.FailWithMessage(err.Error(), c)
} else { return
err = service.CreateFileChunk(file.ID, pathc, chunkNumber) }
if err != nil { err, pathc := utils.BreakPointContinue(cen, fileName, chunkNumber, chunkTotal, fileMd5)
response.FailWithMessage(err.Error(), c) if err != nil {
} else { response.FailWithMessage(err.Error(), c)
response.OkWithMessage("切片创建成功", c) return
} }
}
} if err = service.CreateFileChunk(file.ID, pathc, chunkNumber); err != nil {
} else { response.FailWithMessage(err.Error(), c)
} return
}
} }
response.OkWithMessage("切片创建成功", c)
} }
// @Tags ExaFileUploadAndDownload // @Tags ExaFileUploadAndDownload
......
...@@ -26,12 +26,12 @@ func UploadFile(c *gin.Context) { ...@@ -26,12 +26,12 @@ func UploadFile(c *gin.Context) {
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
} else { } else {
//文件上传后拿到文件路径 // 文件上传后拿到文件路径
err, filePath, key := utils.Upload(header) err, filePath, key := utils.Upload(header)
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c)
} else { } else {
//修改数据库后得到修改后的user并且返回供前端使用 // 修改数据库后得到修改后的user并且返回供前端使用
var file model.ExaFileUploadAndDownload var file model.ExaFileUploadAndDownload
file.Url = filePath file.Url = filePath
file.Name = header.Filename file.Name = header.Filename
......
...@@ -68,7 +68,7 @@ func DeleteApi(c *gin.Context) { ...@@ -68,7 +68,7 @@ func DeleteApi(c *gin.Context) {
} }
} }
//条件搜索后端看此api // 条件搜索后端看此api
// @Tags SysApi // @Tags SysApi
// @Summary 分页获取API列表 // @Summary 分页获取API列表
......
...@@ -93,7 +93,7 @@ func DeleteAuthority(c *gin.Context) { ...@@ -93,7 +93,7 @@ func DeleteAuthority(c *gin.Context) {
response.FailWithMessage(AuthorityIdVerifyErr.Error(), c) response.FailWithMessage(AuthorityIdVerifyErr.Error(), c)
return return
} }
//删除角色之前需要判断是否有用户正在使用此角色 // 删除角色之前需要判断是否有用户正在使用此角色
err := service.DeleteAuthority(&a) err := service.DeleteAuthority(&a)
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
...@@ -127,7 +127,7 @@ func UpdateAuthority(c *gin.Context) { ...@@ -127,7 +127,7 @@ func UpdateAuthority(c *gin.Context) {
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("更新失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("更新失败,%v", err), c)
} else { } else {
response.OkWithData(resp.SysAuthorityResponse{authority}, c) response.OkWithData(resp.SysAuthorityResponse{Authority: authority}, c)
} }
} }
......
...@@ -23,13 +23,13 @@ func CreateTemp(c *gin.Context) { ...@@ -23,13 +23,13 @@ func CreateTemp(c *gin.Context) {
var a model.AutoCodeStruct var a model.AutoCodeStruct
_ = c.ShouldBindJSON(&a) _ = c.ShouldBindJSON(&a)
AutoCodeVerify := utils.Rules{ AutoCodeVerify := utils.Rules{
"Abbreviation": {utils.NotEmpty()}, "Abbreviation": {utils.NotEmpty()},
"StructName": {utils.NotEmpty()}, "StructName": {utils.NotEmpty()},
"PackageName": {utils.NotEmpty()}, "PackageName": {utils.NotEmpty()},
"Fields": {utils.NotEmpty()}, "Fields": {utils.NotEmpty()},
} }
WKVerifyErr := utils.Verify(a, AutoCodeVerify) WKVerifyErr := utils.Verify(a, AutoCodeVerify)
if WKVerifyErr!=nil { if WKVerifyErr != nil {
response.FailWithMessage(WKVerifyErr.Error(), c) response.FailWithMessage(WKVerifyErr.Error(), c)
return return
} }
...@@ -80,7 +80,7 @@ func CreateTemp(c *gin.Context) { ...@@ -80,7 +80,7 @@ func CreateTemp(c *gin.Context) {
response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c)
os.Remove("./ginvueadmin.zip") os.Remove("./ginvueadmin.zip")
} else { } else {
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "ginvueadmin.zip")) //fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名 c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "ginvueadmin.zip")) // fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
c.Writer.Header().Add("Content-Type", "application/json") c.Writer.Header().Add("Content-Type", "application/json")
c.Writer.Header().Add("success", "true") c.Writer.Header().Add("success", "true")
c.File("./ginvueadmin.zip") c.File("./ginvueadmin.zip")
......
...@@ -42,7 +42,7 @@ func SetSystemConfig(c *gin.Context) { ...@@ -42,7 +42,7 @@ func SetSystemConfig(c *gin.Context) {
} }
} }
//本方法开发中 开发者windows系统 缺少linux系统所需的包 因此搁置 // 本方法开发中 开发者windows系统 缺少linux系统所需的包 因此搁置
// @Tags system // @Tags system
// @Summary 设置配置文件内容 // @Summary 设置配置文件内容
// @Security ApiKeyAuth // @Security ApiKeyAuth
......
...@@ -80,10 +80,10 @@ func Login(c *gin.Context) { ...@@ -80,10 +80,10 @@ func Login(c *gin.Context) {
} }
//登录以后签发jwt // 登录以后签发jwt
func tokenNext(c *gin.Context, user model.SysUser) { func tokenNext(c *gin.Context, user model.SysUser) {
j := &middleware.JWT{ j := &middleware.JWT{
[]byte(global.GVA_CONFIG.JWT.SigningKey), // 唯一签名 SigningKey: []byte(global.GVA_CONFIG.JWT.SigningKey), // 唯一签名
} }
clams := request.CustomClaims{ clams := request.CustomClaims{
UUID: user.UUID, UUID: user.UUID,
...@@ -91,58 +91,55 @@ func tokenNext(c *gin.Context, user model.SysUser) { ...@@ -91,58 +91,55 @@ func tokenNext(c *gin.Context, user model.SysUser) {
NickName: user.NickName, NickName: user.NickName,
AuthorityId: user.AuthorityId, AuthorityId: user.AuthorityId,
StandardClaims: jwt.StandardClaims{ StandardClaims: jwt.StandardClaims{
NotBefore: int64(time.Now().Unix() - 1000), // 签名生效时间 NotBefore: time.Now().Unix() - 1000, // 签名生效时间
ExpiresAt: int64(time.Now().Unix() + 60*60*24*7), // 过期时间 一周 ExpiresAt: time.Now().Unix() + 60*60*24*7, // 过期时间 一周
Issuer: "qmPlus", //签名的发行者 Issuer: "qmPlus", // 签名的发行者
}, },
} }
token, err := j.CreateToken(clams) token, err := j.CreateToken(clams)
if err != nil { if err != nil {
response.FailWithMessage("获取token失败", c) response.FailWithMessage("获取token失败", c)
return
}
if !global.GVA_CONFIG.System.UseMultipoint {
response.OkWithData(resp.LoginResponse{
User: user,
Token: token,
ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
}, c)
return
}
var loginJwt model.JwtBlacklist
loginJwt.Jwt = token
err, jwtStr := service.GetRedisJWT(user.Username)
if err == redis.Nil {
if err := service.SetRedisJWT(loginJwt, user.Username); err != nil {
response.FailWithMessage("设置登录状态失败", c)
return
}
response.OkWithData(resp.LoginResponse{
User: user,
Token: token,
ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
}, c)
} else if err != nil {
response.FailWithMessage(fmt.Sprintf("%v", err), c)
} else { } else {
if global.GVA_CONFIG.System.UseMultipoint { var blackJWT model.JwtBlacklist
var loginJwt model.JwtBlacklist blackJWT.Jwt = jwtStr
loginJwt.Jwt = token if err := service.JsonInBlacklist(blackJWT); err != nil {
err, jwtStr := service.GetRedisJWT(user.Username) response.FailWithMessage("jwt作废失败", c)
if err == redis.Nil { return
err2 := service.SetRedisJWT(loginJwt, user.Username) }
if err2 != nil { if err := service.SetRedisJWT(loginJwt, user.Username); err != nil {
response.FailWithMessage("设置登录状态失败", c) response.FailWithMessage("设置登录状态失败", c)
} else { return
response.OkWithData(resp.LoginResponse{
User: user,
Token: token,
ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
}, c)
}
} else if err != nil {
response.FailWithMessage(fmt.Sprintf("%v", err), c)
} else {
var blackJWT model.JwtBlacklist
blackJWT.Jwt = jwtStr
err3 := service.JsonInBlacklist(blackJWT)
if err3 != nil {
response.FailWithMessage("jwt作废失败", c)
} else {
err2 := service.SetRedisJWT(loginJwt, user.Username)
if err2 != nil {
response.FailWithMessage("设置登录状态失败", c)
} else {
response.OkWithData(resp.LoginResponse{
User: user,
Token: token,
ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
}, c)
}
}
}
} else {
response.OkWithData(resp.LoginResponse{
User: user,
Token: token,
ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
}, c)
} }
response.OkWithData(resp.LoginResponse{
User: user,
Token: token,
ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
}, c)
} }
} }
...@@ -189,21 +186,21 @@ type UserHeaderImg struct { ...@@ -189,21 +186,21 @@ type UserHeaderImg struct {
// @Router /user/uploadHeaderImg [post] // @Router /user/uploadHeaderImg [post]
func UploadHeaderImg(c *gin.Context) { func UploadHeaderImg(c *gin.Context) {
claims, _ := c.Get("claims") claims, _ := c.Get("claims")
//获取头像文件 // 获取头像文件
// 这里我们通过断言获取 claims内的所有内容 // 这里我们通过断言获取 claims内的所有内容
waitUse := claims.(*request.CustomClaims) waitUse := claims.(*request.CustomClaims)
uuid := waitUse.UUID uuid := waitUse.UUID
_, header, err := c.Request.FormFile("headerImg") _, header, err := c.Request.FormFile("headerImg")
//便于找到用户 以后从jwt中取 // 便于找到用户 以后从jwt中取
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
} else { } else {
//文件上传后拿到文件路径 // 文件上传后拿到文件路径
err, filePath, _ := utils.Upload(header) err, filePath, _ := utils.Upload(header)
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c)
} else { } else {
//修改数据库后得到修改后的user并且返回供前端使用 // 修改数据库后得到修改后的user并且返回供前端使用
err, user := service.UploadHeaderImg(uuid, filePath) err, user := service.UploadHeaderImg(uuid, filePath)
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c)
......
...@@ -19,13 +19,13 @@ func CreateWorkFlow(c *gin.Context) { ...@@ -19,13 +19,13 @@ func CreateWorkFlow(c *gin.Context) {
var wk model.SysWorkflow var wk model.SysWorkflow
_ = c.ShouldBindJSON(&wk) _ = c.ShouldBindJSON(&wk)
WKVerify := utils.Rules{ WKVerify := utils.Rules{
"WorkflowNickName": {utils.NotEmpty()}, "WorkflowNickName": {utils.NotEmpty()},
"WorkflowName": {utils.NotEmpty()}, "WorkflowName": {utils.NotEmpty()},
"WorkflowDescription": {utils.NotEmpty()}, "WorkflowDescription": {utils.NotEmpty()},
"WorkflowStepInfo": {utils.NotEmpty()}, "WorkflowStepInfo": {utils.NotEmpty()},
} }
WKVerifyErr := utils.Verify(wk, WKVerify) WKVerifyErr := utils.Verify(wk, WKVerify)
if WKVerifyErr!=nil { if WKVerifyErr != nil {
response.FailWithMessage(WKVerifyErr.Error(), c) response.FailWithMessage(WKVerifyErr.Error(), c)
return return
} }
......
...@@ -46,8 +46,8 @@ type Redis struct { ...@@ -46,8 +46,8 @@ type Redis struct {
type Qiniu struct { type Qiniu struct {
AccessKey string `mapstructure:"access-key" json:"accessKey" yaml:"access-key"` AccessKey string `mapstructure:"access-key" json:"accessKey" yaml:"access-key"`
SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"` SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"`
Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"` Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"`
ImgPath string `mapstructure:"img-path" json:"imgPath" yaml:"img-path"` ImgPath string `mapstructure:"img-path" json:"imgPath" yaml:"img-path"`
} }
type Captcha struct { type Captcha struct {
......
...@@ -50,5 +50,5 @@ func FailWithMessage(message string, c *gin.Context) { ...@@ -50,5 +50,5 @@ func FailWithMessage(message string, c *gin.Context) {
} }
func FailWithDetailed(code int, data interface{}, message string, c *gin.Context) { func FailWithDetailed(code int, data interface{}, message string, c *gin.Context) {
Result(code, data, message, c ) Result(code, data, message, c)
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ import ( ...@@ -5,7 +5,7 @@ import (
"gin-vue-admin/model" "gin-vue-admin/model"
) )
//注册数据库表专用 // 注册数据库表专用
func DBTables() { func DBTables() {
db := global.GVA_DB db := global.GVA_DB
db.AutoMigrate(model.SysUser{}, db.AutoMigrate(model.SysUser{},
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
"os" "os"
) )
//初始化数据库并产生数据库全局变量 // 初始化数据库并产生数据库全局变量
func Mysql() { func Mysql() {
admin := global.GVA_CONFIG.Mysql admin := global.GVA_CONFIG.Mysql
if db, err := gorm.Open("mysql", admin.Username+":"+admin.Password+"@("+admin.Path+")/"+admin.Dbname+"?"+admin.Config); err != nil { if db, err := gorm.Open("mysql", admin.Username+":"+admin.Password+"@("+admin.Path+")/"+admin.Dbname+"?"+admin.Config); err != nil {
......
...@@ -10,11 +10,11 @@ import ( ...@@ -10,11 +10,11 @@ import (
"github.com/swaggo/gin-swagger/swaggerFiles" "github.com/swaggo/gin-swagger/swaggerFiles"
) )
//初始化总路由 // 初始化总路由
func Routers() *gin.Engine { func Routers() *gin.Engine {
var Router = gin.Default() var Router = gin.Default()
//Router.Use(middleware.LoadTls()) // 打开就能玩https了 // Router.Use(middleware.LoadTls()) // 打开就能玩https了
global.GVA_LOG.Debug("use middleware logger") global.GVA_LOG.Debug("use middleware logger")
// 跨域 // 跨域
Router.Use(middleware.Cors()) Router.Use(middleware.Cors())
......
...@@ -4,20 +4,20 @@ package initialize ...@@ -4,20 +4,20 @@ package initialize
// 感谢 sqlitet提供者 [rikugun] 作者github: https://github.com/rikugun // 感谢 sqlitet提供者 [rikugun] 作者github: https://github.com/rikugun
//import ( // import (
// "fmt" // "fmt"
// "gin-vue-admin/global" // "gin-vue-admin/global"
// "github.com/jinzhu/gorm" // "github.com/jinzhu/gorm"
// _ "github.com/jinzhu/gorm/dialects/sqlite" // _ "github.com/jinzhu/gorm/dialects/sqlite"
//) // )
// //
////初始化数据库并产生数据库全局变量 // // 初始化数据库并产生数据库全局变量
//func Sqlite() { // func Sqlite() {
// admin := global.GVA_CONFIG.Sqlite // admin := global.GVA_CONFIG.Sqlite
// if db, err := gorm.Open("sqlite3", fmt.Sprintf("%s?%s", admin.Path,admin.Config)); err != nil { // if db, err := gorm.Open("sqlite3", fmt.Sprintf("%s?%s", admin.Path,admin.Config)); err != nil {
// global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err) // global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err)
// } else { // } else {
// global.GVA_DB = db // global.GVA_DB = db
// global.GVA_DB.LogMode(admin.LogMode) // global.GVA_DB.LogMode(admin.LogMode)
// } // }
//} // }
...@@ -18,7 +18,7 @@ func main() { ...@@ -18,7 +18,7 @@ func main() {
switch global.GVA_CONFIG.System.DbType { switch global.GVA_CONFIG.System.DbType {
case "mysql": case "mysql":
initialize.Mysql() initialize.Mysql()
//case "sqlite": // case "sqlite":
// initialize.Sqlite() // sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可 // initialize.Sqlite() // sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可
default: default:
initialize.Mysql() initialize.Mysql()
......
...@@ -8,19 +8,19 @@ import ( ...@@ -8,19 +8,19 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
//拦截器 // 拦截器
func CasbinHandler() gin.HandlerFunc { func CasbinHandler() gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
claims, _ := c.Get("claims") claims, _ := c.Get("claims")
waitUse := claims.(*request.CustomClaims) waitUse := claims.(*request.CustomClaims)
//获取请求的URI // 获取请求的URI
obj := c.Request.URL.RequestURI() obj := c.Request.URL.RequestURI()
//获取请求方法 // 获取请求方法
act := c.Request.Method act := c.Request.Method
//获取用户的角色 // 获取用户的角色
sub := waitUse.AuthorityId sub := waitUse.AuthorityId
e := service.Casbin() e := service.Casbin()
//判断策略中是否存在 // 判断策略中是否存在
if global.GVA_CONFIG.System.Env == "develop" || e.Enforce(sub, obj, act) { if global.GVA_CONFIG.System.Env == "develop" || e.Enforce(sub, obj, act) {
c.Next() c.Next()
} else { } else {
......
...@@ -15,7 +15,7 @@ func Cors() gin.HandlerFunc { ...@@ -15,7 +15,7 @@ func Cors() gin.HandlerFunc {
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type") c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
c.Header("Access-Control-Allow-Credentials", "true") c.Header("Access-Control-Allow-Credentials", "true")
//放行所有OPTIONS方法 // 放行所有OPTIONS方法
if method == "OPTIONS" { if method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent) c.AbortWithStatus(http.StatusNoContent)
} }
......
...@@ -60,10 +60,10 @@ type JWT struct { ...@@ -60,10 +60,10 @@ type JWT struct {
} }
var ( var (
TokenExpired error = errors.New("Token is expired") TokenExpired = errors.New("Token is expired")
TokenNotValidYet error = errors.New("Token not active yet") TokenNotValidYet = errors.New("Token not active yet")
TokenMalformed error = errors.New("That's not even a token") TokenMalformed = errors.New("That's not even a token")
TokenInvalid error = errors.New("Couldn't handle this token:") TokenInvalid = errors.New("Couldn't handle this token:")
) )
func NewJWT() *JWT { func NewJWT() *JWT {
...@@ -72,13 +72,13 @@ func NewJWT() *JWT { ...@@ -72,13 +72,13 @@ func NewJWT() *JWT {
} }
} }
//创建一个token // 创建一个token
func (j *JWT) CreateToken(claims request.CustomClaims) (string, error) { func (j *JWT) CreateToken(claims request.CustomClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString(j.SigningKey) return token.SignedString(j.SigningKey)
} }
//解析 token // 解析 token
func (j *JWT) ParseToken(tokenString string) (*request.CustomClaims, error) { func (j *JWT) ParseToken(tokenString string) (*request.CustomClaims, error) {
token, err := jwt.ParseWithClaims(tokenString, &request.CustomClaims{}, func(token *jwt.Token) (i interface{}, e error) { token, err := jwt.ParseWithClaims(tokenString, &request.CustomClaims{}, func(token *jwt.Token) (i interface{}, e error) {
return j.SigningKey, nil return j.SigningKey, nil
......
...@@ -16,7 +16,7 @@ func LoadTls() gin.HandlerFunc { ...@@ -16,7 +16,7 @@ func LoadTls() gin.HandlerFunc {
}) })
err := middleware.Process(c.Writer, c.Request) err := middleware.Process(c.Writer, c.Request)
if err != nil { if err != nil {
//如果出现错误,请不要继续。 // 如果出现错误,请不要继续
fmt.Println(err) fmt.Println(err)
return return
} }
......
...@@ -21,4 +21,4 @@ type ExaFileChunk struct { ...@@ -21,4 +21,4 @@ type ExaFileChunk struct {
ExaFileId uint ExaFileId uint
FileChunkNumber int FileChunkNumber int
FileChunkPath string FileChunkPath string
} }
\ No newline at end of file
...@@ -11,4 +11,4 @@ type ExaCustomer struct { ...@@ -11,4 +11,4 @@ type ExaCustomer struct {
SysUserID uint `json:"sysUserId" form:"sysUserId"` SysUserID uint `json:"sysUserId" form:"sysUserId"`
SysUserAuthorityID string `json:"sysUserAuthorityID" form:"sysUserAuthorityID"` SysUserAuthorityID string `json:"sysUserAuthorityID" form:"sysUserAuthorityID"`
SysUser SysUser `json:"sysUser" form:"sysUser"` SysUser SysUser `json:"sysUser" form:"sysUser"`
} }
\ No newline at end of file
...@@ -10,4 +10,4 @@ type ExaFileUploadAndDownload struct { ...@@ -10,4 +10,4 @@ type ExaFileUploadAndDownload struct {
Url string `json:"url"` Url string `json:"url"`
Tag string `json:"tag"` Tag string `json:"tag"`
Key string `json:"key"` Key string `json:"key"`
} }
\ No newline at end of file
...@@ -12,4 +12,4 @@ type CustomClaims struct { ...@@ -12,4 +12,4 @@ type CustomClaims struct {
NickName string NickName string
AuthorityId string AuthorityId string
jwt.StandardClaims jwt.StandardClaims
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ package request ...@@ -2,7 +2,7 @@ package request
import "gin-vue-admin/model" import "gin-vue-admin/model"
//api分页条件查询及排序结构体 // api分页条件查询及排序结构体
type SearchApiParams struct { type SearchApiParams struct {
model.SysApi model.SysApi
PageInfo PageInfo
......
...@@ -11,4 +11,4 @@ type AddMenuAuthorityInfo struct { ...@@ -11,4 +11,4 @@ type AddMenuAuthorityInfo struct {
// Get role by id structure // Get role by id structure
type AuthorityIdInfo struct { type AuthorityIdInfo struct {
AuthorityId string AuthorityId string
} }
\ No newline at end of file
...@@ -30,4 +30,4 @@ type ChangePasswordStruct struct { ...@@ -30,4 +30,4 @@ type ChangePasswordStruct struct {
type SetUserAuth struct { type SetUserAuth struct {
UUID uuid.UUID `json:"uuid"` UUID uuid.UUID `json:"uuid"`
AuthorityId string `json:"authorityId"` AuthorityId string `json:"authorityId"`
} }
\ No newline at end of file
...@@ -8,4 +8,4 @@ type FilePathResponse struct { ...@@ -8,4 +8,4 @@ type FilePathResponse struct {
type FileResponse struct { type FileResponse struct {
File model.ExaFile `json:"file"` File model.ExaFile `json:"file"`
} }
\ No newline at end of file
...@@ -10,4 +10,4 @@ type SysApi struct { ...@@ -10,4 +10,4 @@ type SysApi struct {
Description string `json:"description"` Description string `json:"description"`
ApiGroup string `json:"apiGroup"` ApiGroup string `json:"apiGroup"`
Method string `json:"method" gorm:"default:'POST'"` Method string `json:"method" gorm:"default:'POST'"`
} }
\ No newline at end of file
...@@ -14,4 +14,4 @@ type SysAuthority struct { ...@@ -14,4 +14,4 @@ type SysAuthority struct {
DataAuthorityId []SysAuthority `json:"dataAuthorityId" gorm:"many2many:sys_data_authority_id;association_jointable_foreignkey:data_authority_id"` DataAuthorityId []SysAuthority `json:"dataAuthorityId" gorm:"many2many:sys_data_authority_id;association_jointable_foreignkey:data_authority_id"`
Children []SysAuthority `json:"children"` Children []SysAuthority `json:"children"`
SysBaseMenus []SysBaseMenu `json:"menus" gorm:"many2many:sys_authority_menus;"` SysBaseMenus []SysBaseMenu `json:"menus" gorm:"many2many:sys_authority_menus;"`
} }
\ No newline at end of file
...@@ -5,4 +5,4 @@ type SysMenu struct { ...@@ -5,4 +5,4 @@ type SysMenu struct {
MenuId string `json:"menuId"` MenuId string `json:"menuId"`
AuthorityId string `json:"-"` AuthorityId string `json:"-"`
Children []SysMenu `json:"children"` Children []SysMenu `json:"children"`
} }
\ No newline at end of file
...@@ -6,4 +6,4 @@ type CasbinModel struct { ...@@ -6,4 +6,4 @@ type CasbinModel struct {
AuthorityId string `json:"rolename" gorm:"column:v0"` AuthorityId string `json:"rolename" gorm:"column:v0"`
Path string `json:"path" gorm:"column:v1"` Path string `json:"path" gorm:"column:v1"`
Method string `json:"method" gorm:"column:v2"` Method string `json:"method" gorm:"column:v2"`
} }
\ No newline at end of file
...@@ -7,4 +7,4 @@ import ( ...@@ -7,4 +7,4 @@ import (
type JwtBlacklist struct { type JwtBlacklist struct {
gorm.Model gorm.Model
Jwt string `gorm:"type:text"` Jwt string `gorm:"type:text"`
} }
\ No newline at end of file
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"gin-vue-admin/config" "gin-vue-admin/config"
) )
//配置文件结构体 // 配置文件结构体
type System struct { type System struct {
Config config.Server Config config.Server
} }
\ No newline at end of file
...@@ -14,4 +14,4 @@ type SysUser struct { ...@@ -14,4 +14,4 @@ type SysUser struct {
HeaderImg string `json:"headerImg" gorm:"default:'http://www.henrongyi.top/avatar/lufu.jpg'"` HeaderImg string `json:"headerImg" gorm:"default:'http://www.henrongyi.top/avatar/lufu.jpg'"`
Authority SysAuthority `json:"authority" gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId"` Authority SysAuthority `json:"authority" gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId"`
AuthorityId string `json:"authorityId" gorm:"default:888"` AuthorityId string `json:"authorityId" gorm:"default:888"`
} }
\ No newline at end of file
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
) )
//工作流属性表 // 工作流属性表
type SysWorkflow struct { type SysWorkflow struct {
gorm.Model gorm.Model
WorkflowNickName string `json:"workflowNickName"` // 工作流名称 WorkflowNickName string `json:"workflowNickName"` // 工作流名称
...@@ -22,4 +22,4 @@ type SysWorkflowStepInfo struct { ...@@ -22,4 +22,4 @@ type SysWorkflowStepInfo struct {
StepNo float64 `json:"stepNo"` // 步骤id (第几步) StepNo float64 `json:"stepNo"` // 步骤id (第几步)
StepAuthorityID string `json:"stepAuthorityID"` // 操作者级别id StepAuthorityID string `json:"stepAuthorityID"` // 操作者级别id
IsEnd bool `json:"isEnd"` // 是否是完结流节点 IsEnd bool `json:"isEnd"` // 是否是完结流节点
} }
\ No newline at end of file
...@@ -7,7 +7,7 @@ type SysWorkFlowProcess struct { ...@@ -7,7 +7,7 @@ type SysWorkFlowProcess struct {
gorm.Model gorm.Model
ApplicationID uint // 当前工作流所属申请的ID ApplicationID uint // 当前工作流所属申请的ID
CurrentNode string // 当前进度节点 CurrentNode string // 当前进度节点
HistoricalNode string //上一个进度节点 HistoricalNode string // 上一个进度节点
CurrentUser string // 当前进度操作人 CurrentUser string // 当前进度操作人
HistoricalUser string // 上一个进度的操作人 HistoricalUser string // 上一个进度的操作人
State bool // 状态 是否是正在进行的状态 State bool // 状态 是否是正在进行的状态
......
...@@ -9,8 +9,8 @@ import ( ...@@ -9,8 +9,8 @@ import (
func InitCustomerRouter(Router *gin.RouterGroup) { func InitCustomerRouter(Router *gin.RouterGroup) {
ApiRouter := Router.Group("customer").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) ApiRouter := Router.Group("customer").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
ApiRouter.POST("customer", v1.CreateExaCustomer) // 创建客户 ApiRouter.POST("customer", v1.CreateExaCustomer) // 创建客户
ApiRouter.PUT("customer", v1.UpdateExaCustomer) // 更新客户 ApiRouter.PUT("customer", v1.UpdateExaCustomer) // 更新客户
ApiRouter.DELETE("customer", v1.DeleteExaCustomer) // 删除客户 ApiRouter.DELETE("customer", v1.DeleteExaCustomer) // 删除客户
ApiRouter.GET("customer", v1.GetExaCustomer) // 获取单一客户信息 ApiRouter.GET("customer", v1.GetExaCustomer) // 获取单一客户信息
ApiRouter.GET("customerList", v1.GetExaCustomerList) // 获取客户列表 ApiRouter.GET("customerList", v1.GetExaCustomerList) // 获取客户列表
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
func InitFileUploadAndDownloadRouter(Router *gin.RouterGroup) { func InitFileUploadAndDownloadRouter(Router *gin.RouterGroup) {
FileUploadAndDownloadGroup := Router.Group("fileUploadAndDownload") FileUploadAndDownloadGroup := Router.Group("fileUploadAndDownload")
//.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) // .Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
FileUploadAndDownloadGroup.POST("/upload", v1.UploadFile) // 上传文件 FileUploadAndDownloadGroup.POST("/upload", v1.UploadFile) // 上传文件
FileUploadAndDownloadGroup.POST("/getFileList", v1.GetFileList) // 获取上传文件列表 FileUploadAndDownloadGroup.POST("/getFileList", v1.GetFileList) // 获取上传文件列表
......
...@@ -9,11 +9,11 @@ import ( ...@@ -9,11 +9,11 @@ import (
func InitApiRouter(Router *gin.RouterGroup) { func InitApiRouter(Router *gin.RouterGroup) {
ApiRouter := Router.Group("api").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) ApiRouter := Router.Group("api").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
ApiRouter.POST("createApi", v1.CreateApi) //创建Api ApiRouter.POST("createApi", v1.CreateApi) // 创建Api
ApiRouter.POST("deleteApi", v1.DeleteApi) //删除Api ApiRouter.POST("deleteApi", v1.DeleteApi) // 删除Api
ApiRouter.POST("getApiList", v1.GetApiList) //获取Api列表 ApiRouter.POST("getApiList", v1.GetApiList) // 获取Api列表
ApiRouter.POST("getApiById", v1.GetApiById) //获取单条Api消息 ApiRouter.POST("getApiById", v1.GetApiById) // 获取单条Api消息
ApiRouter.POST("updateApi", v1.UpdateApi) //更新api ApiRouter.POST("updateApi", v1.UpdateApi) // 更新api
ApiRouter.POST("getAllApis", v1.GetAllApis) // 获取所有api ApiRouter.POST("getAllApis", v1.GetAllApis) // 获取所有api
} }
} }
...@@ -9,11 +9,11 @@ import ( ...@@ -9,11 +9,11 @@ import (
func InitAuthorityRouter(Router *gin.RouterGroup) { func InitAuthorityRouter(Router *gin.RouterGroup) {
AuthorityRouter := Router.Group("authority").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) AuthorityRouter := Router.Group("authority").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
AuthorityRouter.POST("createAuthority", v1.CreateAuthority) //创建角色 AuthorityRouter.POST("createAuthority", v1.CreateAuthority) // 创建角色
AuthorityRouter.POST("deleteAuthority", v1.DeleteAuthority) //删除角色 AuthorityRouter.POST("deleteAuthority", v1.DeleteAuthority) // 删除角色
AuthorityRouter.PUT("updateAuthority", v1.UpdateAuthority) //更新角色 AuthorityRouter.PUT("updateAuthority", v1.UpdateAuthority) // 更新角色
AuthorityRouter.POST("copyAuthority", v1.CopyAuthority) //更新角色 AuthorityRouter.POST("copyAuthority", v1.CopyAuthority) // 更新角色
AuthorityRouter.POST("getAuthorityList", v1.GetAuthorityList) //获取角色列表 AuthorityRouter.POST("getAuthorityList", v1.GetAuthorityList) // 获取角色列表
AuthorityRouter.POST("setDataAuthority", v1.SetDataAuthority) //设置角色资源权限 AuthorityRouter.POST("setDataAuthority", v1.SetDataAuthority) // 设置角色资源权限
} }
} }
...@@ -9,6 +9,6 @@ import ( ...@@ -9,6 +9,6 @@ import (
func InitAutoCodeRouter(Router *gin.RouterGroup) { func InitAutoCodeRouter(Router *gin.RouterGroup) {
AutoCodeRouter := Router.Group("autoCode").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) AutoCodeRouter := Router.Group("autoCode").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
AutoCodeRouter.POST("createTemp", v1.CreateTemp) //创建自动化代码 AutoCodeRouter.POST("createTemp", v1.CreateTemp) // 创建自动化代码
} }
} }
...@@ -9,6 +9,6 @@ import ( ...@@ -9,6 +9,6 @@ import (
func InitJwtRouter(Router *gin.RouterGroup) { func InitJwtRouter(Router *gin.RouterGroup) {
ApiRouter := Router.Group("jwt").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) ApiRouter := Router.Group("jwt").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
ApiRouter.POST("jsonInBlacklist", v1.JsonInBlacklist) //jwt加入黑名单 ApiRouter.POST("jsonInBlacklist", v1.JsonInBlacklist) // jwt加入黑名单
} }
} }
...@@ -9,7 +9,7 @@ import ( ...@@ -9,7 +9,7 @@ import (
func InitMenuRouter(Router *gin.RouterGroup) (R gin.IRoutes) { func InitMenuRouter(Router *gin.RouterGroup) (R gin.IRoutes) {
MenuRouter := Router.Group("menu").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) MenuRouter := Router.Group("menu").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
MenuRouter.POST("getMenu", v1.GetMenu) //获取菜单树 MenuRouter.POST("getMenu", v1.GetMenu) // 获取菜单树
MenuRouter.POST("getMenuList", v1.GetMenuList) // 分页获取基础menu列表 MenuRouter.POST("getMenuList", v1.GetMenuList) // 分页获取基础menu列表
MenuRouter.POST("addBaseMenu", v1.AddBaseMenu) // 新增菜单 MenuRouter.POST("addBaseMenu", v1.AddBaseMenu) // 新增菜单
MenuRouter.POST("getBaseMenuTree", v1.GetBaseMenuTree) // 获取用户动态路由 MenuRouter.POST("getBaseMenuTree", v1.GetBaseMenuTree) // 获取用户动态路由
...@@ -17,7 +17,7 @@ func InitMenuRouter(Router *gin.RouterGroup) (R gin.IRoutes) { ...@@ -17,7 +17,7 @@ func InitMenuRouter(Router *gin.RouterGroup) (R gin.IRoutes) {
MenuRouter.POST("getMenuAuthority", v1.GetMenuAuthority) // 获取指定角色menu MenuRouter.POST("getMenuAuthority", v1.GetMenuAuthority) // 获取指定角色menu
MenuRouter.POST("deleteBaseMenu", v1.DeleteBaseMenu) // 删除菜单 MenuRouter.POST("deleteBaseMenu", v1.DeleteBaseMenu) // 删除菜单
MenuRouter.POST("updateBaseMenu", v1.UpdateBaseMenu) // 更新菜单 MenuRouter.POST("updateBaseMenu", v1.UpdateBaseMenu) // 更新菜单
MenuRouter.POST("getBaseMenuById", v1.GetBaseMenuById) //根据id获取菜单 MenuRouter.POST("getBaseMenuById", v1.GetBaseMenuById) // 根据id获取菜单
} }
return MenuRouter return MenuRouter
} }
...@@ -10,9 +10,9 @@ func InitUserRouter(Router *gin.RouterGroup) { ...@@ -10,9 +10,9 @@ func InitUserRouter(Router *gin.RouterGroup) {
UserRouter := Router.Group("user").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()) UserRouter := Router.Group("user").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{ {
UserRouter.POST("changePassword", v1.ChangePassword) // 修改密码 UserRouter.POST("changePassword", v1.ChangePassword) // 修改密码
UserRouter.POST("uploadHeaderImg", v1.UploadHeaderImg) //上传头像 UserRouter.POST("uploadHeaderImg", v1.UploadHeaderImg) // 上传头像
UserRouter.POST("getUserList", v1.GetUserList) // 分页获取用户列表 UserRouter.POST("getUserList", v1.GetUserList) // 分页获取用户列表
UserRouter.POST("setUserAuthority", v1.SetUserAuthority) //设置用户权限 UserRouter.POST("setUserAuthority", v1.SetUserAuthority) // 设置用户权限
UserRouter.DELETE("deleteUser", v1.DeleteUser) //删除用户 UserRouter.DELETE("deleteUser", v1.DeleteUser) // 删除用户
} }
} }
...@@ -112,7 +112,7 @@ func GetAuthorityInfoList(info request.PageInfo) (err error, list interface{}, t ...@@ -112,7 +112,7 @@ func GetAuthorityInfoList(info request.PageInfo) (err error, list interface{}, t
var authority []model.SysAuthority var authority []model.SysAuthority
err = db.Limit(limit).Offset(offset).Preload("DataAuthorityId").Where("parent_id = 0").Find(&authority).Error err = db.Limit(limit).Offset(offset).Preload("DataAuthorityId").Where("parent_id = 0").Find(&authority).Error
if len(authority) > 0 { if len(authority) > 0 {
for k, _ := range authority { for k := range authority {
err = findChildrenAuthority(&authority[k]) err = findChildrenAuthority(&authority[k])
} }
} }
...@@ -166,7 +166,7 @@ func SetMenuAuthority(auth *model.SysAuthority) error { ...@@ -166,7 +166,7 @@ func SetMenuAuthority(auth *model.SysAuthority) error {
func findChildrenAuthority(authority *model.SysAuthority) (err error) { func findChildrenAuthority(authority *model.SysAuthority) (err error) {
err = global.GVA_DB.Preload("DataAuthorityId").Where("parent_id = ?", authority.AuthorityId).Find(&authority.Children).Error err = global.GVA_DB.Preload("DataAuthorityId").Where("parent_id = ?", authority.AuthorityId).Find(&authority.Children).Error
if len(authority.Children) > 0 { if len(authority.Children) > 0 {
for k, _ := range authority.Children { for k := range authority.Children {
err = findChildrenAuthority(&authority.Children[k]) err = findChildrenAuthority(&authority.Children[k])
} }
} }
......
...@@ -43,16 +43,16 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) { ...@@ -43,16 +43,16 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
if err != nil { if err != nil {
return err return err
} }
//自动化总目录 // 自动化总目录
_autoCode := "./autoCode/" _autoCode := "./autoCode/"
//自动化后台代码目录 // 自动化后台代码目录
_te := "./autoCode/te/" _te := "./autoCode/te/"
_dir := _te + autoCode.PackageName _dir := _te + autoCode.PackageName
_modeldir := _te + autoCode.PackageName + "/model" _modeldir := _te + autoCode.PackageName + "/model"
_apidir := _te + autoCode.PackageName + "/api" _apidir := _te + autoCode.PackageName + "/api"
_routerdir := _te + autoCode.PackageName + "/router" _routerdir := _te + autoCode.PackageName + "/router"
_servicedir := _te + autoCode.PackageName + "/service" _servicedir := _te + autoCode.PackageName + "/service"
//自动化前台代码目录 // 自动化前台代码目录
_fe := "./autoCode/fe/" _fe := "./autoCode/fe/"
_fe_dir := _fe + autoCode.PackageName _fe_dir := _fe + autoCode.PackageName
_fe_apidir := _fe + autoCode.PackageName + "/api" _fe_apidir := _fe + autoCode.PackageName + "/api"
......
...@@ -117,7 +117,7 @@ func Casbin() *casbin.Enforcer { ...@@ -117,7 +117,7 @@ func Casbin() *casbin.Enforcer {
func ParamsMatch(fullNameKey1 string, key2 string) bool { func ParamsMatch(fullNameKey1 string, key2 string) bool {
key1 := strings.Split(fullNameKey1, "?")[0] key1 := strings.Split(fullNameKey1, "?")[0]
//剥离路径后再使用casbin的keyMatch2 // 剥离路径后再使用casbin的keyMatch2
return util.KeyMatch2(key1, key2) return util.KeyMatch2(key1, key2)
} }
...@@ -132,5 +132,5 @@ func ParamsMatchFunc(args ...interface{}) (interface{}, error) { ...@@ -132,5 +132,5 @@ func ParamsMatchFunc(args ...interface{}) (interface{}, error) {
name1 := args[0].(string) name1 := args[0].(string)
name2 := args[1].(string) name2 := args[1].(string)
return (bool)(ParamsMatch(name1, name2)), nil return ParamsMatch(name1, name2), nil
} }
...@@ -13,15 +13,15 @@ import ( ...@@ -13,15 +13,15 @@ import (
// @return err error // @return err error
// @return menusMsp map{string}[]SysBaseMenu // @return menusMsp map{string}[]SysBaseMenu
func getMenuTreeMap(authorityId string)(err error,treeMap map[string][]model.SysMenu){ func getMenuTreeMap(authorityId string) (err error, treeMap map[string][]model.SysMenu) {
var allMenus []model.SysMenu var allMenus []model.SysMenu
treeMap = make(map[string][]model.SysMenu) treeMap = make(map[string][]model.SysMenu)
sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? ORDER BY authority_menu.sort ASC" sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? ORDER BY authority_menu.sort ASC"
err = global.GVA_DB.Raw(sql,authorityId).Scan(&allMenus).Error err = global.GVA_DB.Raw(sql, authorityId).Scan(&allMenus).Error
for _,v := range allMenus{ for _, v := range allMenus {
treeMap[v.ParentId] = append(treeMap[v.ParentId], v) treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
} }
return err,treeMap return err, treeMap
} }
// @title GetMenuTree // @title GetMenuTree
...@@ -32,7 +32,7 @@ func getMenuTreeMap(authorityId string)(err error,treeMap map[string][]model.Sys ...@@ -32,7 +32,7 @@ func getMenuTreeMap(authorityId string)(err error,treeMap map[string][]model.Sys
// @return menus []model.SysMenu // @return menus []model.SysMenu
func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) { func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
err,menuTree := getMenuTreeMap(authorityId) err, menuTree := getMenuTreeMap(authorityId)
menus = menuTree["0"] menus = menuTree["0"]
for i := 0; i < len(menus); i++ { for i := 0; i < len(menus); i++ {
err = getChildrenList(&menus[i], menuTree) err = getChildrenList(&menus[i], menuTree)
...@@ -47,7 +47,7 @@ func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) { ...@@ -47,7 +47,7 @@ func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
// @param sql string // @param sql string
// @return err error // @return err error
func getChildrenList(menu *model.SysMenu,treeMap map[string][]model.SysMenu) (err error) { func getChildrenList(menu *model.SysMenu, treeMap map[string][]model.SysMenu) (err error) {
menu.Children = treeMap[menu.MenuId] menu.Children = treeMap[menu.MenuId]
for i := 0; i < len(menu.Children); i++ { for i := 0; i < len(menu.Children); i++ {
err = getChildrenList(&menu.Children[i], treeMap) err = getChildrenList(&menu.Children[i], treeMap)
...@@ -65,10 +65,10 @@ func getChildrenList(menu *model.SysMenu,treeMap map[string][]model.SysMenu) (er ...@@ -65,10 +65,10 @@ func getChildrenList(menu *model.SysMenu,treeMap map[string][]model.SysMenu) (er
func GetInfoList() (err error, list interface{}, total int) { func GetInfoList() (err error, list interface{}, total int) {
var menuList []model.SysBaseMenu var menuList []model.SysBaseMenu
err,treeMap := getBaseMenuTreeMap() err, treeMap := getBaseMenuTreeMap()
menuList = treeMap["0"] menuList = treeMap["0"]
for i := 0; i < len(menuList); i++ { for i := 0; i < len(menuList); i++ {
err = getBaseChildrenList(&menuList[i],treeMap) err = getBaseChildrenList(&menuList[i], treeMap)
} }
return err, menuList, total return err, menuList, total
} }
...@@ -79,10 +79,10 @@ func GetInfoList() (err error, list interface{}, total int) { ...@@ -79,10 +79,10 @@ func GetInfoList() (err error, list interface{}, total int) {
// @param menu *model.SysBaseMenu // @param menu *model.SysBaseMenu
// @return err error // @return err error
func getBaseChildrenList(menu *model.SysBaseMenu ,treeMap map[string][]model.SysBaseMenu) (err error) { func getBaseChildrenList(menu *model.SysBaseMenu, treeMap map[string][]model.SysBaseMenu) (err error) {
menu.Children = treeMap[strconv.Itoa(int(menu.ID))] menu.Children = treeMap[strconv.Itoa(int(menu.ID))]
for i := 0; i < len(menu.Children); i++ { for i := 0; i < len(menu.Children); i++ {
err = getBaseChildrenList(&menu.Children[i],treeMap) err = getBaseChildrenList(&menu.Children[i], treeMap)
} }
return err return err
} }
...@@ -92,7 +92,7 @@ func getBaseChildrenList(menu *model.SysBaseMenu ,treeMap map[string][]model.Sys ...@@ -92,7 +92,7 @@ func getBaseChildrenList(menu *model.SysBaseMenu ,treeMap map[string][]model.Sys
// @auth (2020/04/05 20:22) // @auth (2020/04/05 20:22)
// @param menu *model.SysBaseMenu // @param menu *model.SysBaseMenu
// @return err error // @return err error
//增加基础路由 // 增加基础路由
func AddBaseMenu(menu model.SysBaseMenu) (err error) { func AddBaseMenu(menu model.SysBaseMenu) (err error) {
findOne := global.GVA_DB.Where("name = ?", menu.Name).Find(&model.SysBaseMenu{}).Error findOne := global.GVA_DB.Where("name = ?", menu.Name).Find(&model.SysBaseMenu{}).Error
...@@ -110,14 +110,14 @@ func AddBaseMenu(menu model.SysBaseMenu) (err error) { ...@@ -110,14 +110,14 @@ func AddBaseMenu(menu model.SysBaseMenu) (err error) {
// @return err error // @return err error
// @return menusMsp map{string}[]SysBaseMenu // @return menusMsp map{string}[]SysBaseMenu
func getBaseMenuTreeMap()(err error,treeMap map[string][]model.SysBaseMenu){ func getBaseMenuTreeMap() (err error, treeMap map[string][]model.SysBaseMenu) {
var allMenus []model.SysBaseMenu var allMenus []model.SysBaseMenu
treeMap = make(map[string][]model.SysBaseMenu) treeMap = make(map[string][]model.SysBaseMenu)
err = global.GVA_DB.Order("sort", true).Find(&allMenus).Error err = global.GVA_DB.Order("sort", true).Find(&allMenus).Error
for _,v := range allMenus{ for _, v := range allMenus {
treeMap[v.ParentId] = append(treeMap[v.ParentId], v) treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
} }
return err,treeMap return err, treeMap
} }
// @title GetBaseMenuTree // @title GetBaseMenuTree
...@@ -127,10 +127,10 @@ func getBaseMenuTreeMap()(err error,treeMap map[string][]model.SysBaseMenu){ ...@@ -127,10 +127,10 @@ func getBaseMenuTreeMap()(err error,treeMap map[string][]model.SysBaseMenu){
// @return menus []SysBaseMenu // @return menus []SysBaseMenu
func GetBaseMenuTree() (err error, menus []model.SysBaseMenu) { func GetBaseMenuTree() (err error, menus []model.SysBaseMenu) {
err,treeMap := getBaseMenuTreeMap() err, treeMap := getBaseMenuTreeMap()
menus = treeMap["0"] menus = treeMap["0"]
for i := 0; i < len(menus); i++ { for i := 0; i < len(menus); i++ {
err = getBaseChildrenList(&menus[i],treeMap) err = getBaseChildrenList(&menus[i], treeMap)
} }
return err, menus return err, menus
} }
......
...@@ -18,9 +18,9 @@ import ( ...@@ -18,9 +18,9 @@ import (
func Register(u model.SysUser) (err error, userInter model.SysUser) { func Register(u model.SysUser) (err error, userInter model.SysUser) {
var user model.SysUser var user model.SysUser
//判断用户名是否注册 // 判断用户名是否注册
notRegister := global.GVA_DB.Where("username = ?", u.Username).First(&user).RecordNotFound() notRegister := global.GVA_DB.Where("username = ?", u.Username).First(&user).RecordNotFound()
//notRegister为false表明读取到了 不能注册 // notRegister为false表明读取到了 不能注册
if !notRegister { if !notRegister {
return errors.New("用户名已注册"), userInter return errors.New("用户名已注册"), userInter
} else { } else {
...@@ -60,7 +60,7 @@ func Login(u *model.SysUser) (err error, userInter *model.SysUser) { ...@@ -60,7 +60,7 @@ func Login(u *model.SysUser) (err error, userInter *model.SysUser) {
func ChangePassword(u *model.SysUser, newPassword string) (err error, userInter *model.SysUser) { func ChangePassword(u *model.SysUser, newPassword string) (err error, userInter *model.SysUser) {
var user model.SysUser var user model.SysUser
//后期修改jwt+password模式 // TODO:后期修改jwt+password模式
u.Password = utils.MD5V([]byte(u.Password)) u.Password = utils.MD5V([]byte(u.Password))
err = global.GVA_DB.Where("username = ? AND password = ?", u.Username, u.Password).First(&user).Update("password", utils.MD5V([]byte(newPassword))).Error err = global.GVA_DB.Where("username = ? AND password = ?", u.Username, u.Password).First(&user).Update("password", utils.MD5V([]byte(newPassword))).Error
return err, u return err, u
......
...@@ -56,7 +56,7 @@ func MakeFile(fileName string, FileMd5 string) (error, string) { ...@@ -56,7 +56,7 @@ func MakeFile(fileName string, FileMd5 string) (error, string) {
} }
_ = os.MkdirAll(finishDir, os.ModePerm) _ = os.MkdirAll(finishDir, os.ModePerm)
fd, _ := os.OpenFile(finishDir+fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) fd, _ := os.OpenFile(finishDir+fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
for k, _ := range rd { for k := range rd {
content, _ := ioutil.ReadFile(breakpointDir + FileMd5 + "/" + fileName + "_" + strconv.Itoa(k)) content, _ := ioutil.ReadFile(breakpointDir + FileMd5 + "/" + fileName + "_" + strconv.Itoa(k))
_, err = fd.Write(content) _, err = fd.Write(content)
if err != nil { if err != nil {
......
...@@ -37,5 +37,4 @@ func DecryptDES(src []byte) []byte { ...@@ -37,5 +37,4 @@ func DecryptDES(src []byte) []byte {
blockmode.CryptBlocks(src, src) blockmode.CryptBlocks(src, src)
src = unpadding(src) src = unpadding(src)
return src return src
} }
...@@ -32,19 +32,19 @@ func CreateDir(dirs ...string) (err error) { ...@@ -32,19 +32,19 @@ func CreateDir(dirs ...string) (err error) {
for _, v := range dirs { for _, v := range dirs {
exist, err := PathExists(v) exist, err := PathExists(v)
if err != nil { if err != nil {
//log.L.Info(fmt.Sprintf("get dir error![%v]\n", err)) // log.L.Info(fmt.Sprintf("get dir error![%v]\n", err))
return err return err
} }
if exist { if exist {
//log.L.Info(fmt.Sprintf("has dir![%v]\n"+_dir)) // log.L.Info(fmt.Sprintf("has dir![%v]\n"+_dir))
} else { } else {
//log.L.Info(fmt.Sprintf("no dir![%v]\n"+_dir)) // log.L.Info(fmt.Sprintf("no dir![%v]\n"+_dir))
// 创建文件夹 // 创建文件夹
err = os.Mkdir(v, os.ModePerm) err = os.Mkdir(v, os.ModePerm)
if err != nil { if err != nil {
//log.L.Error(fmt.Sprintf("mkdir error![%v]\n",err)) // log.L.Error(fmt.Sprintf("mkdir error![%v]\n",err))
} else { } else {
//log.L.Info("mkdir success!\n") // log.L.Info("mkdir success!\n")
} }
} }
} }
......
...@@ -55,7 +55,7 @@ func DeleteFile(key string) error { ...@@ -55,7 +55,7 @@ func DeleteFile(key string) error {
} }
// 指定空间所在的区域,如果不指定将自动探测 // 指定空间所在的区域,如果不指定将自动探测
// 如果没有特殊需求,默认不需要指定 // 如果没有特殊需求,默认不需要指定
//cfg.Zone=&storage.ZoneHuabei // cfg.Zone=&storage.ZoneHuabei
bucketManager := storage.NewBucketManager(mac, &cfg) bucketManager := storage.NewBucketManager(mac, &cfg)
err := bucketManager.Delete(global.GVA_CONFIG.Qiniu.Bucket, key) err := bucketManager.Delete(global.GVA_CONFIG.Qiniu.Bucket, key)
if err != nil { if err != nil {
......
...@@ -28,32 +28,32 @@ func NotEmpty() string { ...@@ -28,32 +28,32 @@ func NotEmpty() string {
return "notEmpty" return "notEmpty"
} }
//小于入参(<) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较 // 小于入参(<) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
func Lt(mark string) string { func Lt(mark string) string {
return "lt=" + mark return "lt=" + mark
} }
//小于等于入参(<=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较 // 小于等于入参(<=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
func Le(mark string) string { func Le(mark string) string {
return "le=" + mark return "le=" + mark
} }
//等于入参(==) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较 // 等于入参(==) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
func Eq(mark string) string { func Eq(mark string) string {
return "eq=" + mark return "eq=" + mark
} }
//不等于入参(!=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较 // 不等于入参(!=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
func Ne(mark string) string { func Ne(mark string) string {
return "ne=" + mark return "ne=" + mark
} }
//大于等于入参(>=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较 // 大于等于入参(>=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
func Ge(mark string) string { func Ge(mark string) string {
return "ge=" + mark return "ge=" + mark
} }
//大于入参(>) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较 // 大于入参(>) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
func Gt(mark string) string { func Gt(mark string) string {
return "gt=" + mark return "gt=" + mark
} }
...@@ -70,14 +70,14 @@ func Verify(st interface{}, roleMap Rules) (err error) { ...@@ -70,14 +70,14 @@ func Verify(st interface{}, roleMap Rules) (err error) {
} }
typ := reflect.TypeOf(st) typ := reflect.TypeOf(st)
val := reflect.ValueOf(st) //获取reflect.Type类型 val := reflect.ValueOf(st) // 获取reflect.Type类型
kd := val.Kind() //获取到st对应的类别 kd := val.Kind() // 获取到st对应的类别
if kd != reflect.Struct { if kd != reflect.Struct {
return errors.New("expect struct") return errors.New("expect struct")
} }
num := val.NumField() num := val.NumField()
//遍历结构体的所有字段 // 遍历结构体的所有字段
for i := 0; i < num; i++ { for i := 0; i < num; i++ {
tagVal := typ.Field(i) tagVal := typ.Field(i)
val := val.Field(i) val := val.Field(i)
......
...@@ -38,7 +38,7 @@ func ZipFiles(filename string, files []string, oldform, newform string) error { ...@@ -38,7 +38,7 @@ func ZipFiles(filename string, files []string, oldform, newform string) error {
return err return err
} }
//使用上面的FileInforHeader() 就可以把文件保存的路径替换成我们自己想要的了,如下面 // 使用上面的FileInforHeader() 就可以把文件保存的路径替换成我们自己想要的了,如下面
header.Name = strings.Replace(file, oldform, newform, -1) header.Name = strings.Replace(file, oldform, newform, -1)
// 优化压缩 // 优化压缩
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册