mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-21 02:04:09 +00:00
refactor🎨:更新角色模块
This commit is contained in:
@@ -214,19 +214,25 @@ func (e SysMenu) GetMenuRole(c *gin.Context) {
|
||||
// @Security Bearer
|
||||
func (e SysMenu) GetMenuIDS(c *gin.Context) {
|
||||
s := new(service.SysMenu)
|
||||
r := service.SysRole{}
|
||||
m := dto.SysRoleByName{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&m, binding.JSON).
|
||||
MakeService(&s.Service).
|
||||
MakeService(&r.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
r.GetWithName(&m)
|
||||
var data models.RoleMenu
|
||||
data.RoleName = c.GetString("role")
|
||||
data.UpdateBy = user.GetUserId(c)
|
||||
result, err := data.GetIDS(s.Orm)
|
||||
|
||||
if err != nil {
|
||||
e.Logger.Errorf("GetIDS error, %s", err.Error())
|
||||
e.Error(500, err, "获取失败")
|
||||
|
||||
@@ -232,7 +232,7 @@ func (e SysRole) Update2Status(c *gin.Context) {
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, fmt.Sprintf("更新角色状态失败,失败原因:%s ", err.Error()))
|
||||
e.Error(500, err, fmt.Sprintf("更新角色状态失败,失败原因:%s ", err.Error()))
|
||||
return
|
||||
}
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
@@ -273,10 +273,10 @@ func (e SysRole) Update2DataScope(c *gin.Context) {
|
||||
DeptIds: req.DeptIds,
|
||||
}
|
||||
data.UpdateBy = user.GetUserId(c)
|
||||
err = s.UpdateDataScope(data)
|
||||
err = s.UpdateDataScope(&req).Error
|
||||
if err != nil {
|
||||
e.Error(http.StatusInternalServerError, err, "")
|
||||
return
|
||||
}
|
||||
e.OK(nil, "操作成功")
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
package models
|
||||
|
||||
//sys_role_dept
|
||||
type SysRoleDept struct {
|
||||
RoleId int `gorm:"size:11;primaryKey"`
|
||||
DeptId int `gorm:"size:11;primaryKey"`
|
||||
}
|
||||
|
||||
func (SysRoleDept) TableName() string {
|
||||
return "sys_role_dept"
|
||||
}
|
||||
//type SysRoleDept struct {
|
||||
// RoleId int `gorm:"size:11;primaryKey"`
|
||||
// DeptId int `gorm:"size:11;primaryKey"`
|
||||
//}
|
||||
//
|
||||
//func (SysRoleDept) TableName() string {
|
||||
// return "sys_role_dept"
|
||||
//}
|
||||
+159
-168
@@ -1,171 +1,162 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/casbin/casbin/v2"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg"
|
||||
"gorm.io/gorm"
|
||||
//type RoleMenu struct {
|
||||
// RoleId int `gorm:""`
|
||||
// MenuId int `gorm:""`
|
||||
// RoleName string `gorm:"size:128"`
|
||||
// models.ControlBy
|
||||
//}
|
||||
//
|
||||
//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 []SysMenu
|
||||
// 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(tx *gorm.DB, roleId int) error {
|
||||
// if err := tx.Table("sys_role_dept").Where("role_id = ?", roleId).Delete(&rm).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// if err := tx.Table("sys_role_menu").Where("role_id = ?", roleId).Delete(&rm).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// var role SysRole
|
||||
// if err := tx.Table("sys_role").Where("role_id = ?", roleId).First(&role).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// sql3 := "delete from sys_casbin_rule where v0= '" + role.RoleKey + "';"
|
||||
// if err := tx.Exec(sql3).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// return nil
|
||||
//
|
||||
//}
|
||||
//
|
||||
//// 该方法即将弃用
|
||||
//func (rm *RoleMenu) BatchDeleteRoleMenu(tx *gorm.DB, roleIds []int) error {
|
||||
// if err := tx.Table("sys_role_menu").Where("role_id in (?)", roleIds).Delete(&rm).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// var role []SysRole
|
||||
// if err := tx.Table("sys_role").Where("role_id in (?)", roleIds).Find(&role).Error; err != nil {
|
||||
// return 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 {
|
||||
// return err
|
||||
// }
|
||||
// if err := tx.Commit().Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// return nil
|
||||
//
|
||||
//}
|
||||
|
||||
"go-admin/common/models"
|
||||
)
|
||||
|
||||
type RoleMenu struct {
|
||||
RoleId int `gorm:""`
|
||||
MenuId int `gorm:""`
|
||||
RoleName string `gorm:"size:128"`
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
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 []SysMenu
|
||||
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(tx *gorm.DB, roleId int) error {
|
||||
if err := tx.Table("sys_role_dept").Where("role_id = ?", roleId).Delete(&rm).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Table("sys_role_menu").Where("role_id = ?", roleId).Delete(&rm).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
var role SysRole
|
||||
if err := tx.Table("sys_role").Where("role_id = ?", roleId).First(&role).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
sql3 := "delete from sys_casbin_rule where v0= '" + role.RoleKey + "';"
|
||||
if err := tx.Exec(sql3).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// 该方法即将弃用
|
||||
func (rm *RoleMenu) BatchDeleteRoleMenu(tx *gorm.DB, roleIds []int) error {
|
||||
if err := tx.Table("sys_role_menu").Where("role_id in (?)", roleIds).Delete(&rm).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
var role []SysRole
|
||||
if err := tx.Table("sys_role").Where("role_id in (?)", roleIds).Find(&role).Error; err != nil {
|
||||
return 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 {
|
||||
return err
|
||||
}
|
||||
if err := tx.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (rm *RoleMenu) Insert(tx *gorm.DB, enforcer *casbin.SyncedEnforcer, roleId int, menuId []int) error {
|
||||
var err error
|
||||
var (
|
||||
role SysRole
|
||||
menu []SysMenu
|
||||
casbinRules []CasbinRule // casbinRule 待插入队列
|
||||
)
|
||||
// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')
|
||||
if err = tx.Table("sys_role").Where("role_id = ?", roleId).First(&role).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err = tx.Table("sys_menu").Where("menu_id in (?)", menuId).Find(&menu).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
//ORM不支持批量插入所以需要拼接 sql 串
|
||||
sysRoleMenuSql := "INSERT INTO `sys_role_menu` (`role_id`,`menu_id`,`role_name`) 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" {
|
||||
// 加入队列
|
||||
casbinRules = append(casbinRules,
|
||||
CasbinRule{
|
||||
V0: role.RoleKey,
|
||||
V1: m.Path,
|
||||
V2: m.Action,
|
||||
})
|
||||
}
|
||||
}
|
||||
// 执行批量插入sys_role_menu
|
||||
if err = tx.Exec(sysRoleMenuSql).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 执行批量插入sys_casbin_rule
|
||||
if len(casbinRules) > 0 {
|
||||
if err = tx.Create(&casbinRules).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rm *RoleMenu) Delete(tx *gorm.DB, RoleId string, MenuID string) (bool, error) {
|
||||
rm.RoleId, _ = pkg.StringToInt(RoleId)
|
||||
table := tx.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
|
||||
|
||||
}
|
||||
//func (rm *RoleMenu) Insert(tx *gorm.DB, enforcer *casbin.SyncedEnforcer, roleId int, menuId []int) error {
|
||||
// var err error
|
||||
// var (
|
||||
// role SysRole
|
||||
// menu []SysMenu
|
||||
// casbinRules []CasbinRule // casbinRule 待插入队列
|
||||
// )
|
||||
// // 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')
|
||||
// if err = tx.Table("sys_role").Where("role_id = ?", roleId).First(&role).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// if err = tx.Table("sys_menu").Where("menu_id in (?)", menuId).Find(&menu).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// //ORM不支持批量插入所以需要拼接 sql 串
|
||||
// sysRoleMenuSql := "INSERT INTO `sys_role_menu` (`role_id`,`menu_id`,`role_name`) 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" {
|
||||
// // 加入队列
|
||||
// casbinRules = append(casbinRules,
|
||||
// CasbinRule{
|
||||
// V0: role.RoleKey,
|
||||
// V1: m.Path,
|
||||
// V2: m.Action,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
// // 执行批量插入sys_role_menu
|
||||
// if err = tx.Exec(sysRoleMenuSql).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// // 执行批量插入sys_casbin_rule
|
||||
// if len(casbinRules) > 0 {
|
||||
// if err = tx.Create(&casbinRules).Error; err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
//
|
||||
//func (rm *RoleMenu) Delete(tx *gorm.DB, RoleId string, MenuID string) (bool, error) {
|
||||
// rm.RoleId, _ = pkg.StringToInt(RoleId)
|
||||
// table := tx.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
|
||||
//
|
||||
//}
|
||||
@@ -15,6 +15,7 @@ type SysRole struct {
|
||||
Params string `json:"params" gorm:"-"`
|
||||
MenuIds []int `json:"menuIds" gorm:"-"`
|
||||
DeptIds []int `json:"deptIds" gorm:"-"`
|
||||
SysDept []SysDept `json:"sysDept" gorm:"many2many:sys_role_dept;foreignKey:RoleId;joinForeignKey:role_id;references:DeptId;joinReferences:dept_id;"`
|
||||
SysMenu *[]SysMenu `json:"sysMenu" gorm:"many2many:sys_role_menu;foreignKey:RoleId;joinForeignKey:role_id;references:MenuId;joinReferences:menu_id;"`
|
||||
models.ControlBy
|
||||
models.ModelTime
|
||||
|
||||
@@ -46,6 +46,8 @@ type SysRoleControl struct {
|
||||
DataScope string `form:"dataScope"`
|
||||
SysMenu []models.SysMenu `form:"sysMenu"`
|
||||
MenuIds []int `form:"menuIds"`
|
||||
SysDept []models.SysDept `form:"sysDept"`
|
||||
DeptIds []int `form:"deptIds"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
@@ -71,6 +73,7 @@ func (s *SysRoleControl) Generate(model *models.SysRole) {
|
||||
model.Admin = s.Admin
|
||||
model.DataScope = s.DataScope
|
||||
model.SysMenu = &s.SysMenu
|
||||
model.SysDept = s.SysDept
|
||||
|
||||
}
|
||||
|
||||
@@ -80,8 +83,8 @@ func (s *SysRoleControl) GetId() interface{} {
|
||||
}
|
||||
|
||||
type UpdateStatusReq struct {
|
||||
RoleId int `form:"roleId" comment:"角色编码"` // 角色编码
|
||||
Status string `form:"status" comment:"状态"` // 状态
|
||||
RoleId int `form:"roleId" comment:"角色编码"` // 角色编码
|
||||
Status string `form:"status" comment:"状态"` // 状态
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
@@ -96,6 +99,9 @@ func (s *UpdateStatusReq) GetId() interface{} {
|
||||
return s.RoleId
|
||||
}
|
||||
|
||||
type SysRoleByName struct {
|
||||
RoleName string `form:"role"` // 角色编码
|
||||
}
|
||||
|
||||
// SysRoleById 获取单个或者删除的结构体
|
||||
type SysRoleById struct {
|
||||
@@ -126,6 +132,14 @@ type RoleDataScopeReq struct {
|
||||
DeptIds []int `json:"deptIds"`
|
||||
}
|
||||
|
||||
func (s *RoleDataScopeReq) Generate(model *models.SysRole) {
|
||||
if s.RoleId != 0 {
|
||||
model.RoleId = s.RoleId
|
||||
}
|
||||
model.DataScope = s.DataScope
|
||||
model.DeptIds = s.DeptIds
|
||||
}
|
||||
|
||||
type DeptIdList struct {
|
||||
DeptId int `json:"DeptId"`
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"gorm.io/gorm/clause"
|
||||
|
||||
"github.com/casbin/casbin/v2"
|
||||
|
||||
@@ -152,10 +153,8 @@ func (e *SysRole) Update(c *dto.SysRoleControl, cb *casbin.SyncedEnforcer) error
|
||||
}
|
||||
|
||||
// Remove 删除SysRole
|
||||
func (e *SysRole) Remove(d *dto.SysRoleById) error {
|
||||
func (e *SysRole) Remove(c *dto.SysRoleById) error {
|
||||
var err error
|
||||
var data models.SysRole
|
||||
|
||||
tx := e.Orm.Begin()
|
||||
defer func() {
|
||||
if err != nil {
|
||||
@@ -164,31 +163,21 @@ func (e *SysRole) Remove(d *dto.SysRoleById) error {
|
||||
tx.Commit()
|
||||
}
|
||||
}()
|
||||
var model = models.SysRole{}
|
||||
tx.Preload("SysMenu").Preload("SysDept").First(&model, c.GetId())
|
||||
db := tx.Select(clause.Associations).Delete(&model)
|
||||
|
||||
s := SysRoleMenu{}
|
||||
s.Orm = tx
|
||||
s.Log = e.Log
|
||||
for _, roleId := range d.Ids {
|
||||
err = s.DeleteRoleMenu(tx, roleId)
|
||||
if err != nil {
|
||||
e.Log.Errorf("insert role menu error, %", err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
db := tx.Model(&data).Delete(&data, d.Ids)
|
||||
if db.Error != nil {
|
||||
err = db.Error
|
||||
e.Log.Errorf("Delete error: %s", err)
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
err = errors.New("无权删除该数据")
|
||||
return err
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取角色对应的菜单ids
|
||||
// GetRoleMenuId 获取角色对应的菜单ids
|
||||
func (e *SysRole) GetRoleMenuId(roleId int) ([]int, error) {
|
||||
menuIds := make([]int, 0)
|
||||
model := models.SysRole{}
|
||||
@@ -203,7 +192,8 @@ func (e *SysRole) GetRoleMenuId(roleId int) ([]int, error) {
|
||||
return menuIds, nil
|
||||
}
|
||||
|
||||
func (e *SysRole) UpdateDataScope(c *models.SysRole) (err error) {
|
||||
func (e *SysRole) UpdateDataScope(c *dto.RoleDataScopeReq) *SysRole {
|
||||
var err error
|
||||
tx := e.Orm.Begin()
|
||||
defer func() {
|
||||
if err != nil {
|
||||
@@ -212,36 +202,34 @@ func (e *SysRole) UpdateDataScope(c *models.SysRole) (err error) {
|
||||
tx.Commit()
|
||||
}
|
||||
}()
|
||||
err = tx.Model(&models.SysRole{}).Where("role_id = ?", c.RoleId).Select("data_scope", "update_by").Updates(c).Error
|
||||
var dlist = make([]models.SysDept, 0)
|
||||
var model = models.SysRole{}
|
||||
tx.Preload("SysDept").First(&model, c.DeptIds)
|
||||
tx.Where("id in ?", c.DeptIds).Find(&dlist)
|
||||
err = tx.Model(&model).Association("SysDept").Delete(model.SysDept)
|
||||
if err != nil {
|
||||
return err
|
||||
e.Log.Errorf("delete SysDept error:%s", err)
|
||||
_ = e.AddError(err)
|
||||
return e
|
||||
}
|
||||
|
||||
err = tx.Where("role_id = ?", c.RoleId).Delete(&models.SysRoleDept{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
c.Generate(&model)
|
||||
model.SysDept = dlist
|
||||
db := tx.Model(&model).Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model)
|
||||
if db.Error != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
_ = e.AddError(err)
|
||||
return e
|
||||
}
|
||||
|
||||
if c.DataScope == "2" {
|
||||
deptRoles := make([]models.SysRoleDept, len(c.DeptIds))
|
||||
for i := range c.DeptIds {
|
||||
deptRoles[i] = models.SysRoleDept{
|
||||
RoleId: c.RoleId,
|
||||
DeptId: c.DeptIds[i],
|
||||
}
|
||||
}
|
||||
err = tx.Create(&deptRoles).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
_ = e.AddError(errors.New("无权更新该数据"))
|
||||
return e
|
||||
}
|
||||
return err
|
||||
return e
|
||||
}
|
||||
|
||||
// UpdateStatus 修改SysRole对象status
|
||||
func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error {
|
||||
var err error
|
||||
|
||||
tx := e.Orm.Debug().Begin()
|
||||
defer func() {
|
||||
if err != nil {
|
||||
@@ -254,7 +242,6 @@ func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error {
|
||||
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
|
||||
@@ -262,6 +249,27 @@ func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error {
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get 获取SysRole对象
|
||||
func (e *SysRole) GetWithName(d *dto.SysRoleByName, model *models.SysRole) error {
|
||||
var err error
|
||||
db := e.Orm.Where("role_name = ?",d.RoleName).First(model)
|
||||
err = db.Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
err = errors.New("查看对象不存在或无权查看")
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return err
|
||||
}
|
||||
model.MenuIds, err = e.GetRoleMenuId(model.RoleId)
|
||||
if err != nil {
|
||||
e.Log.Errorf("get menuIds error, %s", err.Error())
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -1,11 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
log "github.com/go-admin-team/go-admin-core/logger"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
)
|
||||
|
||||
// SysRoleMenu 即将弃用结构体
|
||||
@@ -71,44 +67,44 @@ type SysRoleMenu struct {
|
||||
// return
|
||||
//}
|
||||
|
||||
func (e *SysRoleMenu) DeleteRoleMenu(tx *gorm.DB, roleId int) (err error) {
|
||||
msgID := e.MsgID
|
||||
err = tx.Where("role_id = ?", roleId).
|
||||
Delete(&models.SysRoleDept{}).Error
|
||||
if err != nil {
|
||||
log.Errorf("msgID[%s] delete role's dept error, %s", msgID, err.Error())
|
||||
return
|
||||
}
|
||||
err = tx.Where("role_id = ?", roleId).
|
||||
Delete(&models.RoleMenu{}).Error
|
||||
if err != nil {
|
||||
log.Errorf("msgID[%s] delete role's menu error, %s", msgID, err.Error())
|
||||
return
|
||||
}
|
||||
var role models.SysRole
|
||||
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("v0 = ?", role.RoleKey).
|
||||
Delete(&models.CasbinRule{}).Error
|
||||
if err != nil {
|
||||
log.Errorf("msgID[%s] delete casbin rule error, %s", msgID, err.Error())
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (e *SysRoleMenu) GetIDS(tx *gorm.DB, roleName string) ([]models.MenuPath, error) {
|
||||
var r []models.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", roleName)
|
||||
if err := table.Find(&r).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
//func (e *SysRoleMenu) DeleteRoleMenu(tx *gorm.DB, roleId int) (err error) {
|
||||
// msgID := e.MsgID
|
||||
// err = tx.Where("role_id = ?", roleId).
|
||||
// Delete(&models.SysRoleDept{}).Error
|
||||
// if err != nil {
|
||||
// log.Errorf("msgID[%s] delete role's dept error, %s", msgID, err.Error())
|
||||
// return
|
||||
// }
|
||||
// err = tx.Where("role_id = ?", roleId).
|
||||
// Delete(&models.RoleMenu{}).Error
|
||||
// if err != nil {
|
||||
// log.Errorf("msgID[%s] delete role's menu error, %s", msgID, err.Error())
|
||||
// return
|
||||
// }
|
||||
// var role models.SysRole
|
||||
// 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("v0 = ?", role.RoleKey).
|
||||
// Delete(&models.CasbinRule{}).Error
|
||||
// if err != nil {
|
||||
// log.Errorf("msgID[%s] delete casbin rule error, %s", msgID, err.Error())
|
||||
// return
|
||||
// }
|
||||
// return
|
||||
//}
|
||||
//
|
||||
//func (e *SysRoleMenu) GetIDS(tx *gorm.DB, roleName string) ([]models.MenuPath, error) {
|
||||
// var r []models.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", roleName)
|
||||
// if err := table.Find(&r).Error; err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// return r, nil
|
||||
//}
|
||||
Reference in New Issue
Block a user