mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-21 02:04:09 +00:00
232 lines
6.1 KiB
Go
232 lines
6.1 KiB
Go
package models
|
||
|
||
import (
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
type RoleMenu struct {
|
||
RoleId int `gorm:""`
|
||
MenuId int `gorm:""`
|
||
RoleName string `gorm:"size:128)"`
|
||
CreateBy string `gorm:"size:128)"`
|
||
UpdateBy string `gorm:"size:128)"`
|
||
}
|
||
|
||
func (RoleMenu) TableName() string {
|
||
return "sys_role_menu"
|
||
}
|
||
|
||
type MenuPath struct {
|
||
Path string `json:"path"`
|
||
}
|
||
|
||
//func (rm *RoleMenu) Get(tx *gorm.DB) ([]RoleMenu, error) {
|
||
// var r []RoleMenu
|
||
// table := tx.Table("sys_role_menu")
|
||
// if rm.RoleId != 0 {
|
||
// table = table.Where("role_id = ?", rm.RoleId)
|
||
//
|
||
// }
|
||
// if err := table.Find(&r).Error; err != nil {
|
||
// return nil, err
|
||
// }
|
||
// return r, nil
|
||
//}
|
||
|
||
func (rm *RoleMenu) GetPermis(tx *gorm.DB) ([]string, error) {
|
||
var r []Menu
|
||
table := tx.Select("sys_menu.permission").Table("sys_menu").Joins("left join sys_role_menu on sys_menu.menu_id = sys_role_menu.menu_id")
|
||
|
||
table = table.Where("role_id = ?", rm.RoleId)
|
||
|
||
table = table.Where("sys_menu.menu_type in('F','C')")
|
||
if err := table.Find(&r).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
var list []string
|
||
for i := 0; i < len(r); i++ {
|
||
list = append(list, r[i].Permission)
|
||
}
|
||
return list, nil
|
||
}
|
||
|
||
func (rm *RoleMenu) GetIDS(tx *gorm.DB) ([]MenuPath, error) {
|
||
var r []MenuPath
|
||
table := tx.Select("sys_menu.path").Table("sys_role_menu")
|
||
table = table.Joins("left join sys_role on sys_role.role_id=sys_role_menu.role_id")
|
||
table = table.Joins("left join sys_menu on sys_menu.id=sys_role_menu.menu_id")
|
||
table = table.Where("sys_role.role_name = ? and sys_menu.type=1", rm.RoleName)
|
||
if err := table.Find(&r).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
return r, nil
|
||
}
|
||
|
||
//func (rm *RoleMenu) DeleteRoleMenu(roleId int) (bool, error) {
|
||
// tx := orm.Eloquent.Begin()
|
||
// defer func() {
|
||
// if r := recover(); r != nil {
|
||
// tx.Rollback()
|
||
// }
|
||
// }()
|
||
//
|
||
// if err := tx.Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
//
|
||
// if err := tx.Table("sys_role_dept").Where("role_id = ?", roleId).Delete(&rm).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// if err := tx.Table("sys_role_menu").Where("role_id = ?", roleId).Delete(&rm).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// var role SysRole
|
||
// if err := tx.Table("sys_role").Where("role_id = ?", roleId).First(&role).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// sql3 := "delete from sys_casbin_rule where v0= '" + role.RoleKey + "';"
|
||
// if err := tx.Exec(sql3).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// if err := tx.Commit().Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
//
|
||
// return true, nil
|
||
//
|
||
//}
|
||
|
||
// 该方法即将弃用
|
||
//func (rm *RoleMenu) BatchDeleteRoleMenu(roleIds []int) (bool, error) {
|
||
// tx := orm.Eloquent.Begin()
|
||
// defer func() {
|
||
// if r := recover(); r != nil {
|
||
// tx.Rollback()
|
||
// }
|
||
// }()
|
||
//
|
||
// if err := tx.Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
//
|
||
// if err := tx.Table("sys_role_menu").Where("role_id in (?)", roleIds).Delete(&rm).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// var role []SysRole
|
||
// if err := tx.Table("sys_role").Where("role_id in (?)", roleIds).Find(&role).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// sql := ""
|
||
// for i := 0; i < len(role); i++ {
|
||
// sql += "delete from sys_casbin_rule where v0= '" + role[i].RoleName + "';"
|
||
// }
|
||
// if err := tx.Exec(sql).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// if err := tx.Commit().Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
// return true, nil
|
||
//
|
||
//}
|
||
|
||
//func (rm *RoleMenu) Insert(roleId int, menuId []int) (bool, error) {
|
||
// var (
|
||
// role SysRole
|
||
// menu []Menu
|
||
// casbinRuleQueue []system.CasbinRule // casbinRule 待插入队列
|
||
// )
|
||
//
|
||
// // 开始事务
|
||
// tx := orm.Eloquent.Begin()
|
||
// defer func() {
|
||
// if r := recover(); r != nil {
|
||
// tx.Rollback()
|
||
// }
|
||
// }()
|
||
//
|
||
// if err := tx.Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
//
|
||
// // 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')
|
||
// if err := tx.Table("sys_role").Where("role_id = ?", roleId).First(&role).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// if err := tx.Table("sys_menu").Where("menu_id in (?)", menuId).Find(&menu).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// //ORM不支持批量插入所以需要拼接 sql 串
|
||
// sysRoleMenuSql := "INSERT INTO `sys_role_menu` (`role_id`,`menu_id`,`role_name`) VALUES "
|
||
// casbinRuleSql := "INSERT INTO `sys_casbin_rule` (`p_type`,`v0`,`v1`,`v2`) VALUES "
|
||
//
|
||
// for i, m := range menu {
|
||
// // 拼装'role_menu'表批量插入SQL语句
|
||
// sysRoleMenuSql += fmt.Sprintf("(%d,%d,'%s')", role.RoleId, m.MenuId, role.RoleKey)
|
||
// if i == len(menu)-1 {
|
||
// sysRoleMenuSql += ";" //最后一条数据 以分号结尾
|
||
// } else {
|
||
// sysRoleMenuSql += ","
|
||
// }
|
||
// if m.MenuType == "A" {
|
||
// // 加入队列
|
||
// casbinRuleQueue = append(casbinRuleQueue,
|
||
// system.CasbinRule{
|
||
// V0: role.RoleKey,
|
||
// V1: m.Path,
|
||
// V2: m.Action,
|
||
// })
|
||
// }
|
||
// }
|
||
// // 执行批量插入sys_role_menu
|
||
// if err := tx.Exec(sysRoleMenuSql).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
//
|
||
// // 拼装'sys_casbin_rule'批量插入SQL语句
|
||
// // TODO: casbinRuleQueue队列不为空时才会拼装,否则直接忽略不执行'for'循环
|
||
// for i, v := range casbinRuleQueue {
|
||
// casbinRuleSql += fmt.Sprintf("('p','%s','%s','%s')", v.V0, v.V1, v.V2)
|
||
// if i == len(casbinRuleQueue)-1 {
|
||
// casbinRuleSql += ";"
|
||
// } else {
|
||
// casbinRuleSql += ","
|
||
// }
|
||
// }
|
||
// // 执行批量插入sys_casbin_rule
|
||
// if len(casbinRuleQueue) > 0 {
|
||
// if err := tx.Exec(casbinRuleSql).Error; err != nil {
|
||
// tx.Rollback()
|
||
// return false, err
|
||
// }
|
||
// }
|
||
//
|
||
// if err := tx.Commit().Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
// return true, nil
|
||
//}
|
||
|
||
//func (rm *RoleMenu) Delete(RoleId string, MenuID string) (bool, error) {
|
||
// rm.RoleId, _ = tools.StringToInt(RoleId)
|
||
// table := orm.Eloquent.Table("sys_role_menu").Where("role_id = ?", RoleId)
|
||
// if MenuID != "" {
|
||
// table = table.Where("menu_id = ?", MenuID)
|
||
// }
|
||
// if err := table.Delete(&rm).Error; err != nil {
|
||
// return false, err
|
||
// }
|
||
// return true, nil
|
||
//
|
||
//}
|