Merge branch 'dev' of github.com:go-admin-team/go-admin into dev

This commit is contained in:
wenjianzhang
2021-06-11 15:26:41 +08:00
26 changed files with 526 additions and 4336 deletions
+51 -13
View File
@@ -1,6 +1,7 @@
package apis
import (
"fmt"
"github.com/gin-gonic/gin/binding"
"github.com/go-admin-team/go-admin-core/sdk"
"go-admin/app/admin/models"
@@ -63,8 +64,7 @@ func (e SysRole) GetPage(c *gin.Context) {
// @Description 获取JSON
// @Tags 角色/Role
// @Param roleId path string false "roleId"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Success 200 {string} string "{"code": -1, "message": "抱歉未找到相关信息"}"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role/{id} [get]
// @Security Bearer
func (e SysRole) Get(c *gin.Context) {
@@ -77,7 +77,7 @@ func (e SysRole) Get(c *gin.Context) {
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
e.Error(500, err, fmt.Sprintf(" %s ", err.Error()))
return
}
@@ -99,8 +99,7 @@ func (e SysRole) Get(c *gin.Context) {
// @Accept application/json
// @Product application/json
// @Param data body dto.SysRoleControl true "data"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role [post]
// @Security Bearer
func (e SysRole) Insert(c *gin.Context) {
@@ -144,8 +143,7 @@ func (e SysRole) Insert(c *gin.Context) {
// @Accept application/json
// @Product application/json
// @Param data body dto.SysRoleControl true "body"
// @Success 200 {string} string "{"code": 200, "message": "修改成功"}"
// @Success 200 {string} string "{"code": -1, "message": "修改失败"}"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role/{id} [put]
// @Security Bearer
func (e SysRole) Update(c *gin.Context) {
@@ -183,8 +181,7 @@ func (e SysRole) Update(c *gin.Context) {
// @Description 删除数据
// @Tags 角色/Role
// @Param data body dto.SysRoleById true "body"
// @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string "{"code": -1, "message": "删除失败"}"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role [delete]
// @Security Bearer
func (e SysRole) Delete(c *gin.Context) {
@@ -197,25 +194,66 @@ func (e SysRole) Delete(c *gin.Context) {
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
e.Error(500, err, fmt.Sprintf("删除角色 %v 失败,\r\n失败信息 %s", req.Ids, err.Error()))
return
}
err = s.Remove(&req)
if err != nil {
e.Logger.Error(err)
e.Error(http.StatusInternalServerError, err, "")
e.Error(500, err, "")
return
}
_, err = global.LoadPolicy(c)
if err != nil {
e.Error(http.StatusInternalServerError, err, "")
e.Error(500, err, fmt.Sprintf("删除角色 %v 失败,失败信息 %s", req.Id, err.Error()))
return
}
e.OK(req.GetId(), "删除成功")
e.OK(req.GetId(), fmt.Sprintf("删除角色角色 %v 状态成功", req.GetId()))
}
// Update2Status 修改用户角色状态
// @Summary 修改用户角色
// @Description 获取JSON
// @Tags 角色/Role
// @Accept application/json
// @Product application/json
// @Param data body dto.UpdateStatusReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role-status/{id} [put]
// @Security Bearer
func (e SysRole) Update2Status(c *gin.Context) {
s := service.SysRole{}
req := dto.UpdateStatusReq{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req, nil, binding.JSON).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, fmt.Sprintf("更新角色状态失败,失败原因:%s ", err.Error()))
return
}
req.SetUpdateBy(user.GetUserId(c))
err = s.UpdateStatus(&req)
if err != nil {
e.Error(500, err, fmt.Sprintf("更新角色状态失败,失败原因:%s ", err.Error()))
return
}
e.OK(req.GetId(), fmt.Sprintf("更新角色 %v 状态成功!", req.GetId()))
}
// Update2DataScope 更新角色数据权限
// @Summary 更新角色数据权限
// @Description 获取JSON
// @Tags 角色/Role
// @Accept application/json
// @Product application/json
// @Param data body dto.RoleDataScopeReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role-status/{id} [put]
// @Security Bearer
func (e SysRole) Update2DataScope(c *gin.Context) {
s := &service.SysRole{}
req := dto.RoleDataScopeReq{}
+62 -143
View File
@@ -2,6 +2,8 @@ package tools
import (
"bytes"
"go-admin/app/admin/service"
"go-admin/app/admin/service/dto"
"net/http"
"strconv"
"strings"
@@ -13,7 +15,6 @@ import (
"github.com/go-admin-team/go-admin-core/sdk/config"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"go-admin/app/admin/models"
"go-admin/app/admin/models/tools"
)
@@ -250,14 +251,20 @@ func (e Gen) NOActionsGen(c *gin.Context, tab tools.SysTables) {
}
func (e Gen) genApiToFile(c *gin.Context, tab tools.SysTables) {
e.Context = c
log := e.GetLogger()
err := e.MakeContext(c).
MakeOrm().
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
basePath := "template/"
t1, err := template.ParseFiles(basePath + "api_migrate.template")
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(500, err, "")
return
}
@@ -273,8 +280,15 @@ func (e Gen) genApiToFile(c *gin.Context, tab tools.SysTables) {
}
func (e Gen) ActionsGen(c *gin.Context, tab tools.SysTables) {
e.Context = c
log := api.GetRequestLogger(c)
err := e.MakeContext(c).
MakeOrm().
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
basePath := "template/v4/"
routerFile := basePath + "actions/router_check_role.go.template"
@@ -284,31 +298,31 @@ func (e Gen) ActionsGen(c *gin.Context, tab tools.SysTables) {
t1, err := template.ParseFiles(basePath + "model.go.template")
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(500, err, "")
return
}
t3, err := template.ParseFiles(routerFile)
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(500, err, "")
return
}
t4, err := template.ParseFiles(basePath + "js.go.template")
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(500, err, "")
return
}
t5, err := template.ParseFiles(basePath + "vue.go.template")
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(500, err, "")
return
}
t6, err := template.ParseFiles(basePath + "dto.go.template")
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(500, err, "")
return
}
@@ -338,25 +352,26 @@ func (e Gen) ActionsGen(c *gin.Context, tab tools.SysTables) {
}
func (e Gen) GenMenuAndApi(c *gin.Context) {
e.Context = c
log := e.GetLogger()
table := tools.SysTables{}
timeNow := pkg.GetCurrentTime()
id, err := pkg.StringToInt(c.Param("tableId"))
pkg.HasError(err, "", -1)
db, err := pkg.GetOrm(c)
s:=service.SysMenu{}
err := e.MakeContext(c).
MakeOrm().
MakeService(&s.Service).
Errors
if err != nil {
log.Errorf("get db connection error, %s", err.Error())
e.Error(http.StatusInternalServerError, err, "数据库连接获取失败")
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
table := tools.SysTables{}
id, err := pkg.StringToInt(c.Param("tableId"))
pkg.HasError(err, "", -1)
table.TableId = id
tab, _ := table.Get(db)
Mmenu := models.Menu{}
//Mmenu.MenuName =
tab, _ := table.Get(e.Orm)
Mmenu := dto.SysMenuControl{}
Mmenu.Title = tab.TableComment
Mmenu.Icon = "pass"
Mmenu.Path = "/" + strings.Replace(tab.TBName, "_", "-", -1)
@@ -368,13 +383,10 @@ func (e Gen) GenMenuAndApi(c *gin.Context) {
Mmenu.Sort = 0
Mmenu.Visible = "0"
Mmenu.IsFrame = "0"
Mmenu.CreateBy = "1"
Mmenu.UpdateBy = "1"
Mmenu.CreatedAt = timeNow
Mmenu.UpdatedAt = timeNow
Mmenu.MenuId, err = Mmenu.Create(db)
Mmenu.CreateBy = 1
s.Insert(&Mmenu)
Cmenu := models.Menu{}
Cmenu := dto.SysMenuControl{}
Cmenu.MenuName = tab.ClassName + "Manage"
Cmenu.Title = tab.TableComment
Cmenu.Icon = "pass"
@@ -388,13 +400,11 @@ func (e Gen) GenMenuAndApi(c *gin.Context) {
Cmenu.Sort = 0
Cmenu.Visible = "0"
Cmenu.IsFrame = "0"
Cmenu.CreateBy = "1"
Cmenu.UpdateBy = "1"
Cmenu.CreatedAt = timeNow
Cmenu.UpdatedAt = timeNow
Cmenu.MenuId, err = Cmenu.Create(db)
Cmenu.CreateBy = 1
Cmenu.UpdateBy = 1
s.Insert(&Cmenu)
MList := models.Menu{}
MList := dto.SysMenuControl{}
MList.MenuName = ""
MList.Title = "分页获取" + tab.TableComment
MList.Icon = ""
@@ -407,13 +417,11 @@ func (e Gen) GenMenuAndApi(c *gin.Context) {
MList.Sort = 0
MList.Visible = "0"
MList.IsFrame = "0"
MList.CreateBy = "1"
MList.UpdateBy = "1"
MList.CreatedAt = timeNow
MList.UpdatedAt = timeNow
MList.MenuId, err = MList.Create(db)
MList.CreateBy = 1
MList.UpdateBy = 1
s.Insert(&MList)
MCreate := models.Menu{}
MCreate := dto.SysMenuControl{}
MCreate.MenuName = ""
MCreate.Title = "创建" + tab.TableComment
MCreate.Icon = ""
@@ -426,13 +434,11 @@ func (e Gen) GenMenuAndApi(c *gin.Context) {
MCreate.Sort = 0
MCreate.Visible = "0"
MCreate.IsFrame = "0"
MCreate.CreateBy = "1"
MCreate.UpdateBy = "1"
MCreate.CreatedAt = timeNow
MCreate.UpdatedAt = timeNow
MCreate.MenuId, err = MCreate.Create(db)
MCreate.CreateBy = 1
MCreate.UpdateBy = 1
s.Insert(&MCreate)
MUpdate := models.Menu{}
MUpdate := dto.SysMenuControl{}
MUpdate.MenuName = ""
MUpdate.Title = "修改" + tab.TableComment
MUpdate.Icon = ""
@@ -445,13 +451,11 @@ func (e Gen) GenMenuAndApi(c *gin.Context) {
MUpdate.Sort = 0
MUpdate.Visible = "0"
MUpdate.IsFrame = "0"
MUpdate.CreateBy = "1"
MUpdate.UpdateBy = "1"
MUpdate.CreatedAt = timeNow
MUpdate.UpdatedAt = timeNow
MUpdate.MenuId, err = MUpdate.Create(db)
MUpdate.CreateBy = 1
MUpdate.UpdateBy = 1
s.Insert(&MUpdate)
MDelete := models.Menu{}
MDelete := dto.SysMenuControl{}
MDelete.MenuName = ""
MDelete.Title = "删除" + tab.TableComment
MDelete.Icon = ""
@@ -464,95 +468,10 @@ func (e Gen) GenMenuAndApi(c *gin.Context) {
MDelete.Sort = 0
MDelete.Visible = "0"
MDelete.IsFrame = "0"
MDelete.CreateBy = "1"
MDelete.UpdateBy = "1"
MDelete.CreatedAt = timeNow
MDelete.UpdatedAt = timeNow
MDelete.MenuId, err = MDelete.Create(db)
MDelete.CreateBy = 1
MDelete.UpdateBy = 1
s.Insert(&MDelete)
var InterfaceId = 63
Amenu := models.Menu{}
Amenu.MenuName = tab.TBName
Amenu.Title = tab.TableComment
Amenu.Icon = "bug"
Amenu.Path = tab.TBName
Amenu.MenuType = "M"
Amenu.Action = "无"
Amenu.ParentId = InterfaceId
Amenu.NoCache = false
Amenu.Sort = 0
Amenu.Visible = "1"
Amenu.IsFrame = "0"
Amenu.CreateBy = "1"
Amenu.UpdateBy = "1"
Amenu.CreatedAt = timeNow
Amenu.UpdatedAt = timeNow
Amenu.MenuId, err = Amenu.Create(db)
//AList := models.SysApi{}
//AList.Name = ""
//AList.Title = "分页获取" + tab.TableComment
//AList.Path = "/api/v1/" + tab.ModuleFrontName
//AList.Action = "GET"
//AList.ParentId = Amenu.MenuId
//AList.Sort = 0
//AList.CreateBy = 1
//AList.UpdateBy = 1
//AList.CreatedAt = timeNow
//AList.UpdatedAt = timeNow
//AList.Id, err = AList.Create(db)
//
//AGet := models.SysApi{}
//AList.Name = ""
//AGet.Title = "根据id获取" + tab.TableComment
//AGet.Path = "/api/v1/" + tab.ModuleFrontName + "/:id"
//AGet.Action = "GET"
//AGet.ParentId = Amenu.MenuId
//AGet.Sort = 0
//AGet.CreateBy = 1
//AGet.UpdateBy = 1
//AGet.CreatedAt = timeNow
//AGet.UpdatedAt = timeNow
//AGet.Id, err = AGet.Create(db)
//
//ACreate := models.SysApi{}
//AList.Name = ""
//ACreate.Title = "创建" + tab.TableComment
//ACreate.Path = "/api/v1/" + tab.ModuleFrontName
//ACreate.Action = "POST"
//ACreate.ParentId = Amenu.MenuId
//ACreate.Sort = 0
//ACreate.CreateBy = 1
//ACreate.UpdateBy = 1
//ACreate.CreatedAt = timeNow
//ACreate.UpdatedAt = timeNow
//ACreate.Id, err = ACreate.Create(db)
//
//AUpdate := models.SysApi{}
//AList.Name = ""
//AUpdate.Title = "修改" + tab.TableComment
//AUpdate.Path = "/api/v1/" + tab.ModuleFrontName + "/:id"
//AUpdate.Action = "PUT"
//AUpdate.ParentId = Amenu.MenuId
//AUpdate.Sort = 0
//AUpdate.CreateBy = 1
//AUpdate.UpdateBy = 1
//AUpdate.CreatedAt = timeNow
//AUpdate.UpdatedAt = timeNow
//AUpdate.Id, err = AUpdate.Create(db)
//
//ADelete := models.SysApi{}
//AList.Name = ""
//ADelete.Title = "删除" + tab.TableComment
//ADelete.Path = "/api/v1/" + tab.ModuleFrontName
//ADelete.Action = "DELETE"
//ADelete.ParentId = Amenu.MenuId
//ADelete.Sort = 0
//ADelete.CreateBy = 1
//ADelete.UpdateBy = 1
//ADelete.CreatedAt = timeNow
//ADelete.UpdatedAt = timeNow
//ADelete.Id, err = ADelete.Create(db)
e.OK("", "数据生成成功!")
}
+152 -160
View File
@@ -1,162 +1,154 @@
package models
import (
"errors"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"go-admin/common/models"
"gorm.io/gorm"
)
type Menu struct {
MenuId int `json:"menuId" gorm:"primaryKey;autoIncrement"`
MenuName string `json:"menuName" gorm:"size:128;"`
Title string `json:"title" gorm:"size:128;"`
Icon string `json:"icon" gorm:"size:128;"`
Path string `json:"path" gorm:"size:128;"`
Paths string `json:"paths" gorm:"size:128;"`
MenuType string `json:"menuType" gorm:"size:1;"`
Action string `json:"action" gorm:"size:16;"`
Permission string `json:"permission" gorm:"size:255;"`
ParentId int `json:"parentId" gorm:"size:11;"`
NoCache bool `json:"noCache" gorm:"size:8;"`
Breadcrumb string `json:"breadcrumb" gorm:"size:255;"`
Component string `json:"component" gorm:"size:255;"`
Sort int `json:"sort" gorm:"size:4;"`
Visible string `json:"visible" gorm:"size:1;"`
CreateBy string `json:"createBy" gorm:"size:128;"`
UpdateBy string `json:"updateBy" gorm:"size:128;"`
IsFrame string `json:"isFrame" gorm:"size:1;DEFAULT:0;"`
DataScope string `json:"dataScope" gorm:"-"`
Params string `json:"params" gorm:"-"`
RoleId int `gorm:"-"`
Children []Menu `json:"children" gorm:"-"`
IsSelect bool `json:"is_select" gorm:"-"`
models.ModelTime
}
func (Menu) TableName() string {
return "sys_menu"
}
type MenuLable struct {
Id int `json:"id" gorm:"-"`
Label string `json:"label" gorm:"-"`
Children []MenuLable `json:"children" gorm:"-"`
}
type Menus struct {
MenuId int `json:"menuId" gorm:"column:menu_id;primaryKey;autoIncrement;"`
MenuName string `json:"menuName" gorm:"column:menu_name"`
Title string `json:"title" gorm:"column:title"`
Icon string `json:"icon" gorm:"column:icon"`
Path string `json:"path" gorm:"column:path"`
MenuType string `json:"menuType" gorm:"column:menu_type"`
Action string `json:"action" gorm:"column:action"`
Permission string `json:"permission" gorm:"column:permission"`
ParentId int `json:"parentId" gorm:"column:parent_id"`
NoCache bool `json:"noCache" gorm:"column:no_cache"`
Breadcrumb string `json:"breadcrumb" gorm:"column:breadcrumb"`
Component string `json:"component" gorm:"column:component"`
Sort int `json:"sort" gorm:"column:sort"`
Visible string `json:"visible" gorm:"column:visible"`
Children []Menu `json:"children" gorm:"-"`
CreateBy string `json:"createBy" gorm:"column:create_by"`
UpdateBy string `json:"updateBy" gorm:"column:update_by"`
DataScope string `json:"dataScope" gorm:"-"`
Params string `json:"params" gorm:"-"`
BaseModel
}
func (Menus) TableName() string {
return "sys_menu"
}
type MenuRole struct {
Menus
IsSelect bool `json:"is_select" gorm:"-"`
}
type MS []Menu
func (e *Menu) Get(tx *gorm.DB) (Menus []Menu, err error) {
table := tx.Table(e.TableName())
if e.MenuName != "" {
table = table.Where("menu_name = ?", e.MenuName)
}
if e.Path != "" {
table = table.Where("path = ?", e.Path)
}
if e.Action != "" {
table = table.Where("action = ?", e.Action)
}
if e.MenuType != "" {
table = table.Where("menu_type = ?", e.MenuType)
}
if err = table.Order("sort").Find(&Menus).Error; err != nil {
return
}
return
}
func (e *Menu) GetPage(tx *gorm.DB) (Menus []Menu, err error) {
table := tx.Table(e.TableName())
if e.MenuName != "" {
table = table.Where("menu_name = ?", e.MenuName)
}
if e.Title != "" {
table = table.Where("title = ?", e.Title)
}
if e.Visible != "" {
table = table.Where("visible = ?", e.Visible)
}
if e.MenuType != "" {
table = table.Where("menu_type = ?", e.MenuType)
}
// 数据权限控制
dataPermission := new(DataPermission)
dataPermission.UserId, _ = pkg.StringToInt(e.DataScope)
table, err = dataPermission.GetDataScope("sys_menu", table)
if err != nil {
return nil, err
}
if err = table.Order("sort").Find(&Menus).Error; err != nil {
return
}
return
}
func (e *Menu) Create(tx *gorm.DB) (id int, err error) {
result := tx.Table(e.TableName()).Create(&e)
if result.Error != nil {
err = result.Error
return
}
err = InitPaths(tx, e)
if err != nil {
return
}
id = e.MenuId
return
}
func InitPaths(tx *gorm.DB, menu *Menu) (err error) {
parentMenu := new(Menu)
if menu.ParentId != 0 {
tx.Table("sys_menu").Where("menu_id = ?", menu.ParentId).First(parentMenu)
if parentMenu.Paths == "" {
err = errors.New("父级paths异常,请尝试对当前节点父级菜单进行更新操作!")
return
}
menu.Paths = parentMenu.Paths + "/" + pkg.IntToString(menu.MenuId)
} else {
menu.Paths = "/0/" + pkg.IntToString(menu.MenuId)
}
tx.Table("sys_menu").Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths)
return
}
//type Menu struct {
// MenuId int `json:"menuId" gorm:"primaryKey;autoIncrement"`
// MenuName string `json:"menuName" gorm:"size:128;"`
// Title string `json:"title" gorm:"size:128;"`
// Icon string `json:"icon" gorm:"size:128;"`
// Path string `json:"path" gorm:"size:128;"`
// Paths string `json:"paths" gorm:"size:128;"`
// MenuType string `json:"menuType" gorm:"size:1;"`
// Action string `json:"action" gorm:"size:16;"`
// Permission string `json:"permission" gorm:"size:255;"`
// ParentId int `json:"parentId" gorm:"size:11;"`
// NoCache bool `json:"noCache" gorm:"size:8;"`
// Breadcrumb string `json:"breadcrumb" gorm:"size:255;"`
// Component string `json:"component" gorm:"size:255;"`
// Sort int `json:"sort" gorm:"size:4;"`
// Visible string `json:"visible" gorm:"size:1;"`
// CreateBy string `json:"createBy" gorm:"size:128;"`
// UpdateBy string `json:"updateBy" gorm:"size:128;"`
// IsFrame string `json:"isFrame" gorm:"size:1;DEFAULT:0;"`
// DataScope string `json:"dataScope" gorm:"-"`
// Params string `json:"params" gorm:"-"`
// RoleId int `gorm:"-"`
// Children []Menu `json:"children" gorm:"-"`
// IsSelect bool `json:"is_select" gorm:"-"`
//
// models.ModelTime
//}
//
//func (Menu) TableName() string {
// return "sys_menu"
//}
//
//type MenuLable struct {
// Id int `json:"id" gorm:"-"`
// Label string `json:"label" gorm:"-"`
// Children []MenuLable `json:"children" gorm:"-"`
//}
//
//type Menus struct {
// MenuId int `json:"menuId" gorm:"column:menu_id;primaryKey;autoIncrement;"`
// MenuName string `json:"menuName" gorm:"column:menu_name"`
// Title string `json:"title" gorm:"column:title"`
// Icon string `json:"icon" gorm:"column:icon"`
// Path string `json:"path" gorm:"column:path"`
// MenuType string `json:"menuType" gorm:"column:menu_type"`
// Action string `json:"action" gorm:"column:action"`
// Permission string `json:"permission" gorm:"column:permission"`
// ParentId int `json:"parentId" gorm:"column:parent_id"`
// NoCache bool `json:"noCache" gorm:"column:no_cache"`
// Breadcrumb string `json:"breadcrumb" gorm:"column:breadcrumb"`
// Component string `json:"component" gorm:"column:component"`
// Sort int `json:"sort" gorm:"column:sort"`
//
// Visible string `json:"visible" gorm:"column:visible"`
// Children []Menu `json:"children" gorm:"-"`
//
// CreateBy string `json:"createBy" gorm:"column:create_by"`
// UpdateBy string `json:"updateBy" gorm:"column:update_by"`
// DataScope string `json:"dataScope" gorm:"-"`
// Params string `json:"params" gorm:"-"`
// BaseModel
//}
//
//func (Menus) TableName() string {
// return "sys_menu"
//}
//
//type MenuRole struct {
// Menus
// IsSelect bool `json:"is_select" gorm:"-"`
//}
//
//type MS []Menu
//
//func (e *Menu) Get(tx *gorm.DB) (Menus []Menu, err error) {
// table := tx.Table(e.TableName())
// if e.MenuName != "" {
// table = table.Where("menu_name = ?", e.MenuName)
// }
// if e.Path != "" {
// table = table.Where("path = ?", e.Path)
// }
// if e.Action != "" {
// table = table.Where("action = ?", e.Action)
// }
// if e.MenuType != "" {
// table = table.Where("menu_type = ?", e.MenuType)
// }
//
// if err = table.Order("sort").Find(&Menus).Error; err != nil {
// return
// }
// return
//}
//
//func (e *Menu) GetPage(tx *gorm.DB) (Menus []Menu, err error) {
// table := tx.Table(e.TableName())
// if e.MenuName != "" {
// table = table.Where("menu_name = ?", e.MenuName)
// }
// if e.Title != "" {
// table = table.Where("title = ?", e.Title)
// }
// if e.Visible != "" {
// table = table.Where("visible = ?", e.Visible)
// }
// if e.MenuType != "" {
// table = table.Where("menu_type = ?", e.MenuType)
// }
//
// // 数据权限控制
// dataPermission := new(DataPermission)
// dataPermission.UserId, _ = pkg.StringToInt(e.DataScope)
// table, err = dataPermission.GetDataScope("sys_menu", table)
// if err != nil {
// return nil, err
// }
// if err = table.Order("sort").Find(&Menus).Error; err != nil {
// return
// }
// return
//}
//
//func (e *Menu) Create(tx *gorm.DB) (id int, err error) {
// result := tx.Table(e.TableName()).Create(&e)
// if result.Error != nil {
// err = result.Error
// return
// }
// err = InitPaths(tx, e)
// if err != nil {
// return
// }
// id = e.MenuId
// return
//}
//
//func InitPaths(tx *gorm.DB, menu *Menu) (err error) {
// parentMenu := new(Menu)
// if menu.ParentId != 0 {
// tx.Table("sys_menu").Where("menu_id = ?", menu.ParentId).First(parentMenu)
// if parentMenu.Paths == "" {
// err = errors.New("父级paths异常,请尝试对当前节点父级菜单进行更新操作!")
// return
// }
// menu.Paths = parentMenu.Paths + "/" + pkg.IntToString(menu.MenuId)
// } else {
// menu.Paths = "/0/" + pkg.IntToString(menu.MenuId)
// }
// tx.Table("sys_menu").Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths)
// return
//}
-5
View File
@@ -71,11 +71,6 @@ func SaveOperaLog(message storage.Messager) (err error) {
log.Errorf("json Unmarshal error, %s", err.Error())
return err
}
if l.Title == "" {
m := &SysMenu{}
db.Model(m).Select("Title").Where("action = ?", l.Method).Where("path = ?", message.GetValues()["_fullPath"]).First(m)
l.Title = m.Title
}
err = db.Create(&l).Error
if err != nil {
log.Errorf("db create error, %s", err.Error())
+9 -8
View File
@@ -2,16 +2,17 @@ package router
import (
"github.com/gin-gonic/gin"
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
"go-admin/app/admin/apis"
"go-admin/app/admin/apis/tools"
)
func init() {
routerNoCheckRole = append(routerNoCheckRole, sysNoCheckRoleRouter, registerDBRouter, registerSysTableRouter)
routerCheckRole = append(routerCheckRole, sysNoCheckRoleRouter, registerDBRouter, registerSysTableRouter)
}
func sysNoCheckRoleRouter(v1 *gin.RouterGroup) {
r := v1.Group("")
func sysNoCheckRoleRouter(v1 *gin.RouterGroup ,authMiddleware *jwt.GinJWTMiddleware) {
r := v1.Group("").Use(authMiddleware.MiddlewareFunc())
{
sys := apis.System{}
r.GET("/getCaptcha", sys.GenerateCaptchaHandler)
@@ -25,8 +26,8 @@ func sysNoCheckRoleRouter(v1 *gin.RouterGroup) {
}
}
func registerDBRouter(v1 *gin.RouterGroup) {
db := v1.Group("/db")
func registerDBRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
db := v1.Group("/db").Use(authMiddleware.MiddlewareFunc())
{
gen := tools.Gen{}
db.GET("/tables/page", gen.GetDBTableList)
@@ -34,12 +35,12 @@ func registerDBRouter(v1 *gin.RouterGroup) {
}
}
func registerSysTableRouter(v1 *gin.RouterGroup) {
func registerSysTableRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
tables := v1.Group("/sys/tables")
{
sysTable := tools.SysTable{}
tables.GET("/page", sysTable.GetSysTableList)
tablesInfo := tables.Group("/info")
tables.Group("").Use(authMiddleware.MiddlewareFunc()).GET("/page", sysTable.GetSysTableList)
tablesInfo := tables.Group("/info").Use(authMiddleware.MiddlewareFunc())
{
tablesInfo.POST("", sysTable.InsertSysTable)
tablesInfo.PUT("", sysTable.UpdateSysTable)
+2 -14
View File
@@ -6,12 +6,7 @@ import (
"github.com/gin-gonic/gin"
log "github.com/go-admin-team/go-admin-core/logger"
"github.com/go-admin-team/go-admin-core/sdk"
"github.com/go-admin-team/go-admin-core/sdk/api"
"github.com/go-admin-team/go-admin-core/sdk/config"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
common "go-admin/common/middleware"
"go-admin/common/middleware/handler"
)
// InitRouter 路由初始化,不要怀疑,这里用到了
@@ -19,8 +14,8 @@ func InitRouter() {
var r *gin.Engine
h := sdk.Runtime.GetEngine()
if h == nil {
h = gin.New()
sdk.Runtime.SetEngine(h)
log.Fatal("not found engine...")
os.Exit(-1)
}
switch h.(type) {
case *gin.Engine:
@@ -29,14 +24,7 @@ func InitRouter() {
log.Fatal("not support other engine")
os.Exit(-1)
}
if config.SslConfig.Enable {
r.Use(handler.TlsHandler())
}
r.Use(common.Sentinel()).
Use(common.RequestId(pkg.TrafficKey)).
Use(api.SetRequestLogger)
common.InitMiddleware(r)
// the jwt middleware
authMiddleware, err := common.AuthInit()
if err != nil {
+2 -2
View File
@@ -28,12 +28,12 @@ func registerSysConfigRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMidd
r1.GET("/:configKey", api.GetSysConfigByKEYForService)
}
r2 := v1.Group("/app-config")
r2 := v1.Group("/app-config").Use(authMiddleware.MiddlewareFunc())
{
r2.GET("", api.GetSysConfigBySysApp)
}
r3 := v1.Group("/set-config")
r3 := v1.Group("/set-config").Use(authMiddleware.MiddlewareFunc())
{
r3.PUT("", api.Update2Set)
r3.GET("", api.Get2Set)
+5 -1
View File
@@ -23,5 +23,9 @@ func registerSysRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
r.PUT("/:id", api.Update)
r.DELETE("", api.Delete)
}
v1.PUT("/roledatascope", api.Update2DataScope)
r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc())
{
r1.PUT("/role-status", api.Update2Status)
r1.PUT("/roledatascope", api.Update2DataScope)
}
}
+19 -2
View File
@@ -34,7 +34,6 @@ func (m *SysRoleSearch) GetNeedSearch() interface{} {
return *m
}
// SysConfigControl 增、改使用的结构体
type SysRoleControl struct {
RoleId int `uri:"id" comment:"角色编码"` // 角色编码
RoleName string `form:"roleName" comment:"角色名称"` // 角色名称
@@ -80,7 +79,25 @@ func (s *SysRoleControl) GetId() interface{} {
return s.RoleId
}
// SysConfigById 获取单个或者删除的结构体
type UpdateStatusReq struct {
RoleId int `form:"roleId" comment:"角色编码"` // 角色编码
Status string `form:"status" comment:"状态"` // 状态
common.ControlBy
}
func (s *UpdateStatusReq) Generate(model *models.SysRole) {
if s.RoleId != 0 {
model.RoleId = s.RoleId
}
model.Status = s.Status
}
func (s *UpdateStatusReq) GetId() interface{} {
return s.RoleId
}
// SysRoleById 获取单个或者删除的结构体
type SysRoleById struct {
dto.ObjectById
}
+7 -6
View File
@@ -18,7 +18,7 @@ type SysMenu struct {
service.Service
}
// GetSysMenuPage 获取SysMenu列表
// GetPage 获取SysMenu列表
func (e *SysMenu) GetPage(c *dto.SysMenuSearch, menus *[]models.SysMenu) *SysMenu {
var menu = make([]models.SysMenu, 0)
err := e.getPage(c, &menu).Error
@@ -36,7 +36,7 @@ func (e *SysMenu) GetPage(c *dto.SysMenuSearch, menus *[]models.SysMenu) *SysMen
return e
}
// getSysMenuPage 菜单分页列表
// getPage 菜单分页列表
func (e *SysMenu) getPage(c *dto.SysMenuSearch, list *[]models.SysMenu) *SysMenu {
var err error
var data models.SysMenu
@@ -55,7 +55,7 @@ func (e *SysMenu) getPage(c *dto.SysMenuSearch, list *[]models.SysMenu) *SysMenu
return e
}
// GetSysMenu 获取SysMenu对象
// Get 获取SysMenu对象
func (e *SysMenu) Get(d *dto.SysMenuById, model *models.SysMenu) *SysMenu {
var err error
var data models.SysMenu
@@ -82,7 +82,7 @@ func (e *SysMenu) Get(d *dto.SysMenuById, model *models.SysMenu) *SysMenu {
return e
}
// InsertSysMenu 创建SysMenu对象
// Insert 创建SysMenu对象
func (e *SysMenu) Insert(c *dto.SysMenuControl) *SysMenu {
var err error
var data models.SysMenu
@@ -92,6 +92,7 @@ func (e *SysMenu) Insert(c *dto.SysMenuControl) *SysMenu {
e.Log.Errorf("db error:%s", err)
_ = e.AddError(err)
}
c.MenuId = data.MenuId
return e
}
@@ -113,7 +114,7 @@ func (e *SysMenu) initPaths(menu *models.SysMenu) error {
return err
}
// UpdateSysMenu 修改SysMenu对象
// Update 修改SysMenu对象
func (e *SysMenu) Update(c *dto.SysMenuControl) *SysMenu {
var err error
var model = models.SysMenu{}
@@ -132,7 +133,7 @@ func (e *SysMenu) Update(c *dto.SysMenuControl) *SysMenu {
return e
}
// RemoveSysMenu 删除SysMenu
// Remove 删除SysMenu
func (e *SysMenu) Remove(d *dto.SysMenuById) *SysMenu {
var err error
var data models.SysMenu
+28
View File
@@ -237,3 +237,31 @@ func (e *SysRole) UpdateDataScope(c *models.SysRole) (err error) {
}
return err
}
// UpdateStatus 修改SysRole对象status
func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error {
var err error
tx := e.Orm.Debug().Begin()
defer func() {
if err != nil {
tx.Rollback()
} else {
tx.Commit()
}
}()
var model = models.SysRole{}
tx.First(&model, c.GetId())
c.Generate(&model)
db := tx.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model)
if db.Error != nil {
e.Log.Errorf("db error:%s", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权更新该数据")
}
return nil
}
+58 -57
View File
@@ -8,67 +8,68 @@ import (
"go-admin/app/admin/models"
)
// SysRoleMenu 即将弃用结构体
type SysRoleMenu struct {
service.Service
}
func (e *SysRoleMenu) ReloadRule(tx *gorm.DB, roleId int, menuId []int) (err error) {
var role models.SysRole
msgID := e.MsgID
menu := make([]models.Menu, 0)
roleMenu := make([]models.RoleMenu, len(menuId))
casbinRule := make([]models.CasbinRule, 0)
//先删除所有的
err = e.DeleteRoleMenu(tx, roleId)
if err != nil {
return
}
// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db'
err = tx.Where("role_id = ?", roleId).First(&role).Error
if err != nil {
log.Errorf("msgID[%s] get role error, %s", msgID, err.Error())
return
}
err = tx.Where("menu_id in (?)", menuId).
//Select("path, action, menu_id, menu_type").
Find(&menu).Error
if err != nil {
log.Errorf("msgID[%s] get menu error, %s", msgID, err.Error())
return
}
for i := range menu {
roleMenu[i] = models.RoleMenu{
RoleId: role.RoleId,
MenuId: menu[i].MenuId,
RoleName: role.RoleKey,
}
if menu[i].MenuType == "A" {
casbinRule = append(casbinRule, models.CasbinRule{
PType: "p",
V0: role.RoleKey,
V1: menu[i].Path,
V2: menu[i].Action,
})
}
}
err = tx.Create(&roleMenu).Error
if err != nil {
log.Errorf("msgID[%s] batch create role's menu error, %s", msgID, err.Error())
return
}
if len(casbinRule) > 0 {
err = tx.Create(&casbinRule).Error
if err != nil {
log.Errorf("msgID[%s] batch create casbin rule error, %s", msgID, err.Error())
return
}
}
return
}
//func (e *SysRoleMenu) ReloadRule(tx *gorm.DB, roleId int, menuId []int) (err error) {
// var role models.SysRole
//
// msgID := e.MsgID
//
// menu := make([]models.Menu, 0)
// roleMenu := make([]models.RoleMenu, len(menuId))
// casbinRule := make([]models.CasbinRule, 0)
// //先删除所有的
// err = e.DeleteRoleMenu(tx, roleId)
// if err != nil {
// return
// }
//
// // 在事务中做一些数据库操作(从这一点使用'tx',而不是'db'
// err = tx.Where("role_id = ?", roleId).First(&role).Error
// if err != nil {
// log.Errorf("msgID[%s] get role error, %s", msgID, err.Error())
// return
// }
// err = tx.Where("menu_id in (?)", menuId).
// //Select("path, action, menu_id, menu_type").
// Find(&menu).Error
// if err != nil {
// log.Errorf("msgID[%s] get menu error, %s", msgID, err.Error())
// return
// }
// for i := range menu {
// roleMenu[i] = models.RoleMenu{
// RoleId: role.RoleId,
// MenuId: menu[i].MenuId,
// RoleName: role.RoleKey,
// }
// if menu[i].MenuType == "A" {
// casbinRule = append(casbinRule, models.CasbinRule{
// PType: "p",
// V0: role.RoleKey,
// V1: menu[i].Path,
// V2: menu[i].Action,
// })
// }
// }
// err = tx.Create(&roleMenu).Error
// if err != nil {
// log.Errorf("msgID[%s] batch create role's menu error, %s", msgID, err.Error())
// return
// }
// if len(casbinRule) > 0 {
// err = tx.Create(&casbinRule).Error
// if err != nil {
// log.Errorf("msgID[%s] batch create casbin rule error, %s", msgID, err.Error())
// return
// }
// }
//
// return
//}
func (e *SysRoleMenu) DeleteRoleMenu(tx *gorm.DB, roleId int) (err error) {
msgID := e.MsgID
+3 -8
View File
@@ -1,7 +1,7 @@
package router
import (
"github.com/go-admin-team/go-admin-core/sdk/pkg"
_ "github.com/go-admin-team/go-admin-core/sdk/pkg"
"os"
"github.com/gin-gonic/gin"
@@ -15,8 +15,8 @@ func InitRouter() {
var r *gin.Engine
h := sdk.Runtime.GetEngine()
if h == nil {
h = gin.New()
sdk.Runtime.SetEngine(h)
log.Fatal("not found engine...")
os.Exit(-1)
}
switch h.(type) {
case *gin.Engine:
@@ -25,10 +25,6 @@ func InitRouter() {
log.Fatal("not support other engine")
os.Exit(-1)
}
r.Use(common.Sentinel()).
Use(common.RequestId(pkg.TrafficKey))
common.InitMiddleware(r)
// the jwt middleware
authMiddleware, err := common.AuthInit()
if err != nil {
@@ -36,6 +32,5 @@ func InitRouter() {
}
// 注册业务路由
// TODO: 这里可存放业务路由,里边并无实际路由只有演示代码
initRouter(r, authMiddleware)
}
+3 -8
View File
@@ -1,7 +1,7 @@
package router
import (
"github.com/go-admin-team/go-admin-core/sdk/pkg"
//"github.com/go-admin-team/go-admin-core/sdk/pkg"
"os"
"github.com/gin-gonic/gin"
@@ -15,8 +15,8 @@ func InitRouter() {
var r *gin.Engine
h := sdk.Runtime.GetEngine()
if h == nil {
h = gin.New()
sdk.Runtime.SetEngine(h)
log.Fatal("not found engine...")
os.Exit(-1)
}
switch h.(type) {
case *gin.Engine:
@@ -26,16 +26,11 @@ func InitRouter() {
os.Exit(-1)
}
r.Use(common.Sentinel()).
Use(common.RequestId(pkg.TrafficKey))
common.InitMiddleware(r)
// the jwt middleware
authMiddleware, err := common.AuthInit()
if err != nil {
log.Fatalf("JWT Init Error, %s", err.Error())
}
// 注册业务路由
// TODO: 这里可存放业务路由,里边并无实际路由只有演示代码
initRouter(r, authMiddleware)
}
+2 -6
View File
@@ -14,8 +14,8 @@ func InitRouter() {
var r *gin.Engine
h := sdk.Runtime.GetEngine()
if h == nil {
h = gin.New()
sdk.Runtime.SetEngine(h)
log.Fatal("not found engine...")
os.Exit(-1)
}
switch h.(type) {
case *gin.Engine:
@@ -24,10 +24,6 @@ func InitRouter() {
log.Fatal("not support other engine")
os.Exit(-1)
}
//r.Use(common.Sentinel()).
// Use(common.RequestId(pkg.TrafficKey))
common.InitMiddleware(r)
// the jwt middleware
authMiddleware, err := common.AuthInit()
if err != nil {
+41 -49
View File
@@ -12,10 +12,9 @@ import (
"github.com/gin-gonic/gin"
"github.com/go-admin-team/go-admin-core/config/source/file"
"github.com/go-admin-team/go-admin-core/sdk"
"github.com/go-admin-team/go-admin-core/sdk/api"
"github.com/go-admin-team/go-admin-core/sdk/config"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"github.com/go-admin-team/go-admin-core/sdk/pkg/captcha"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"github.com/go-admin-team/go-admin-core/sdk/runtime"
"github.com/spf13/cobra"
@@ -24,6 +23,9 @@ import (
"go-admin/app/jobs"
"go-admin/common/database"
"go-admin/common/global"
common "go-admin/common/middleware"
"go-admin/common/middleware/handler"
"go-admin/common/storage"
ext "go-admin/config"
)
@@ -58,65 +60,27 @@ func setup() {
// 注入配置扩展项
config.ExtendConfig = &ext.ExtConfig
//1. 读取配置
config.Setup(file.NewSource(file.WithPath(configYml)))
//2. 设置日志
sdk.Runtime.SetLogger(
logger.SetupLogger(
config.LoggerConfig.Type,
config.LoggerConfig.Path,
config.LoggerConfig.Level,
config.LoggerConfig.Stdout))
//3. 初始化数据库链接
database.Setup()
//4. 设置缓存
cacheAdapter, err := config.CacheConfig.Setup()
if err != nil {
log.Fatalf("cache setup error, %s\n", err.Error())
}
sdk.Runtime.SetCacheAdapter(cacheAdapter)
//5. 设置验证码store
captcha.SetStore(captcha.NewCacheStore(cacheAdapter, 600))
//6. 设置队列
if !config.QueueConfig.Empty() {
queueAdapter, err := config.QueueConfig.Setup()
if err != nil {
log.Fatalf("queue setup error, %s\n", err.Error())
}
sdk.Runtime.SetQueueAdapter(queueAdapter)
defer func() {
go queueAdapter.Run()
}()
}
//7. 设置分布式锁
if !config.LockerConfig.Empty() {
lockerAdapter, err := config.LockerConfig.Setup()
if err != nil {
log.Fatalf("locker setup error, %s\n", err.Error())
}
sdk.Runtime.SetLockerAdapter(lockerAdapter)
}
usageStr := `starting api server...`
log.Println(usageStr)
config.Setup(
file.NewSource(file.WithPath(configYml)),
database.Setup,
storage.Setup,
)
//注册监听函数
queue := sdk.Runtime.GetMemoryQueue("")
queue.Register(global.LoginLog, models.SaveLoginLog)
queue.Register(global.OperateLog, models.SaveOperaLog)
queue.Register(global.ApiCheck, models.SaveSysApi)
go queue.Run()
usageStr := `starting api server...`
log.Println(usageStr)
}
func run() error {
if config.ApplicationConfig.Mode == pkg.ModeProd.String() {
gin.SetMode(gin.ReleaseMode)
}
engine := sdk.Runtime.GetEngine()
if engine == nil {
engine = gin.New()
}
initRouter()
for _, f := range AppRouters {
f()
@@ -126,11 +90,13 @@ func run() error {
Addr: fmt.Sprintf("%s:%d", config.ApplicationConfig.Host, config.ApplicationConfig.Port),
Handler: sdk.Runtime.GetEngine(),
}
go func() {
jobs.InitJob()
jobs.Setup(sdk.Runtime.GetDb())
}()
if apiCheck {
var routers = sdk.Runtime.GetRouter()
q := sdk.Runtime.GetMemoryQueue("")
@@ -191,3 +157,29 @@ func tip() {
usageStr := `欢迎使用 ` + pkg.Green(`go-admin `+global.Version) + ` 可以使用 ` + pkg.Red(`-h`) + ` 查看命令`
fmt.Printf("%s \n\n", usageStr)
}
func initRouter() {
var r *gin.Engine
h := sdk.Runtime.GetEngine()
if h == nil {
h = gin.New()
sdk.Runtime.SetEngine(h)
}
switch h.(type) {
case *gin.Engine:
r = h.(*gin.Engine)
default:
log.Fatal("not support other engine")
os.Exit(-1)
}
if config.SslConfig.Enable {
r.Use(handler.TlsHandler())
}
//r.Use(middleware.Metrics())
r.Use(common.Sentinel()).
Use(common.RequestId(pkg.TrafficKey)).
Use(api.SetRequestLogger)
common.InitMiddleware(r)
}
+1 -1
View File
@@ -11,8 +11,8 @@ type SysRole struct {
Admin bool `json:"admin" gorm:"size:4;"`
DataScope string `json:"dataScope" gorm:"size:128;"`
SysMenu []SysMenu `json:"sysMenu" gorm:"many2many:sys_role_menu;foreignKey:RoleId;joinForeignKey:role_id;references:MenuId;joinReferences:menu_id;"`
ModelTime
ControlBy
ModelTime
}
func (SysRole) TableName() string {
@@ -40,6 +40,7 @@ func _1599190683659Tables(db *gorm.DB, version string) error {
new(models.SysCategory),
new(models.SysContent),
new(models.SysApi),
new(models.SysChinaAreaData),
)
if err != nil {
return err
+5 -12
View File
@@ -13,7 +13,6 @@ import (
"github.com/spf13/cobra"
"github.com/go-admin-team/go-admin-core/sdk/config"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"go-admin/cmd/migrate/migration"
_ "go-admin/cmd/migrate/migration/version"
_ "go-admin/cmd/migrate/migration/version-local"
@@ -49,15 +48,10 @@ func run() {
if !generate {
fmt.Println(`start init`)
//1. 读取配置
config.Setup(file.NewSource(file.WithPath(configYml)))
//2. 设置日志
sdk.Runtime.SetLogger(
logger.SetupLogger(
config.LoggerConfig.Type,
config.LoggerConfig.Path,
config.LoggerConfig.Level,
config.LoggerConfig.Stdout))
_ = initDB()
config.Setup(
file.NewSource(file.WithPath(configYml)),
initDB,
)
} else {
fmt.Println(`generate migration file`)
_ = genFile()
@@ -81,14 +75,13 @@ func migrateModel() error {
migration.Migrate.Migrate()
return err
}
func initDB() error {
func initDB() {
//3. 初始化数据库链接
database.Setup()
//4. 数据库迁移
fmt.Println("数据库迁移开始")
_ = migrateModel()
fmt.Println(`数据库基础数据初始化成功`)
return nil
}
func genFile() error {
+3 -2
View File
@@ -14,6 +14,7 @@ import (
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
"github.com/go-admin-team/go-admin-core/sdk/pkg/response"
"github.com/mssola/user_agent"
gaConfig "go-admin/config"
"go-admin/common/global"
)
@@ -115,7 +116,7 @@ func LoginLogToDB(c *gin.Context, status string, msg string, username string) {
ua := user_agent.New(c.Request.UserAgent())
l["ipaddr"] = c.ClientIP()
l["loginLocation"] = pkg.GetLocation(c.ClientIP())
l["loginLocation"] = pkg.GetLocation(c.ClientIP(),gaConfig.ExtConfig.AMap.Key)
l["loginTime"] = pkg.GetCurrentTime()
l["status"] = status
l["remark"] = c.Request.UserAgent()
@@ -139,6 +140,7 @@ func LoginLogToDB(c *gin.Context, status string, msg string, username string) {
}
}
// LogOut
// @Summary 退出登录
// @Description 获取token
// LoginHandler can be used by clients to get a jwt token.
@@ -167,7 +169,6 @@ func Authorizator(data interface{}, c *gin.Context) bool {
c.Set("userId", u.UserId)
c.Set("userName", u.Username)
c.Set("dataScope", r.DataScope)
return true
}
return false
+1
View File
@@ -26,6 +26,7 @@ func InitMiddleware(r *gin.Engine) {
r.Use(Options)
// Secure is a middleware function that appends security
r.Use(Secure)
//r.Use(DemoEvn())
// 链路追踪
//r.Use(middleware.Trace())
sdk.Runtime.SetMiddleware(JwtTokenCheck, (*jwt.GinJWTMiddleware).MiddlewareFunc)
+2 -1
View File
@@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"encoding/json"
gaConfig "go-admin/config"
"io"
"io/ioutil"
"net/http"
@@ -104,7 +105,7 @@ func SetDBOperLog(c *gin.Context, clientIP string, statusCode int, reqUri string
l["_fullPath"] = c.FullPath()
l["operUrl"] = reqUri
l["operIp"] = clientIP
l["operLocation"] = pkg.GetLocation(clientIP)
l["operLocation"] = pkg.GetLocation(clientIP, gaConfig.ExtConfig.AMap.Key)
l["operName"] = user.GetUserName(c)
l["requestMethod"] = c.Request.Method
l["operParam"] = body
+52
View File
@@ -0,0 +1,52 @@
/*
* @Author: lwnmengjing
* @Date: 2021/6/10 3:39 下午
* @Last Modified by: lwnmengjing
* @Last Modified time: 2021/6/10 3:39 下午
*/
package storage
import (
"log"
"github.com/go-admin-team/go-admin-core/sdk"
"github.com/go-admin-team/go-admin-core/sdk/config"
"github.com/go-admin-team/go-admin-core/sdk/pkg/captcha"
)
// Setup 配置storage组件
func Setup() {
//4. 设置缓存
cacheAdapter, err := config.CacheConfig.Setup()
if err != nil {
log.Fatalf("cache setup error, %s\n", err.Error())
}
sdk.Runtime.SetCacheAdapter(cacheAdapter)
//5. 设置验证码store
captcha.SetStore(captcha.NewCacheStore(cacheAdapter, 600))
//6. 设置队列
if !config.QueueConfig.Empty() {
if q := sdk.Runtime.GetQueueAdapter(); q != nil {
q.Shutdown()
}
queueAdapter, err := config.QueueConfig.Setup()
if err != nil {
log.Fatalf("queue setup error, %s\n", err.Error())
}
sdk.Runtime.SetQueueAdapter(queueAdapter)
defer func() {
go queueAdapter.Run()
}()
}
//7. 设置分布式锁
if !config.LockerConfig.Empty() {
lockerAdapter, err := config.LockerConfig.Setup()
if err != nil {
log.Fatalf("locker setup error, %s\n", err.Error())
}
sdk.Runtime.SetLockerAdapter(lockerAdapter)
}
}
+7 -3828
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -8,9 +8,9 @@ var ExtConfig Extend
// name: demo-name
// 使用方法: config.ExtConfig......即可!!
type Extend struct {
// Demo Demo // 这里配置对应配置文件的结构即可
AMap AMap // 这里配置对应配置文件的结构即可
}
type Demo struct {
Name string
type AMap struct {
Key string
}
+2 -2
View File
@@ -9,8 +9,8 @@ require (
github.com/bytedance/go-tagexpr/v2 v2.7.10
github.com/casbin/casbin/v2 v2.25.1
github.com/gin-gonic/gin v1.7.1
github.com/go-admin-team/go-admin-core v1.3.5-rc.3.0.20210609062350-5aeb6bd49b09
github.com/go-admin-team/go-admin-core/sdk v1.3.0-rc.3.0.20210609082125-a317acc34456
github.com/go-admin-team/go-admin-core v1.3.5-rc.5.0.20210610090758-13967b971b9f
github.com/go-admin-team/go-admin-core/sdk v1.3.5-rc.5.0.20210610090758-13967b971b9f
github.com/google/uuid v1.2.0
github.com/mssola/user_agent v0.5.2
github.com/opentracing/opentracing-go v1.1.0