diff --git a/app/admin/models/menu.go b/app/admin/models/menu.go index 9007f1e7..2c71030e 100644 --- a/app/admin/models/menu.go +++ b/app/admin/models/menu.go @@ -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 +//} diff --git a/app/admin/service/sys_menu.go b/app/admin/service/sys_menu.go index 4cff1611..39a7a3c0 100644 --- a/app/admin/service/sys_menu.go +++ b/app/admin/service/sys_menu.go @@ -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 @@ -322,4 +323,4 @@ func (e *SysMenu) getByRoleName(roleName string) ([]models.SysMenu, error) { e.Log.Errorf("db error:%s", err) } return MenuList, err -} \ No newline at end of file +} diff --git a/app/admin/service/sys_role_menu.go b/app/admin/service/sys_role_menu.go index c6cbc9a5..23fb78b6 100644 --- a/app/admin/service/sys_role_menu.go +++ b/app/admin/service/sys_role_menu.go @@ -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