修改角色菜单
This commit is contained in:
@@ -207,3 +207,77 @@ func UpdateUserRole(ctx *jxcontext.Context, userIDs []string, roleIDs []int) (er
|
||||
dao.Commit(db)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetRoleMenu(ctx *jxcontext.Context, roleID int) (roleMenus []*model.RoleMenu, err error) {
|
||||
return dao.GetRoleMenu(dao.GetDB(), []int{roleID}, nil)
|
||||
}
|
||||
|
||||
func UpdateRoleMenu(ctx *jxcontext.Context, roleIDs, menuIDs []int) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
menuIDMap = make(map[int]int)
|
||||
nowMenuIDMap = make(map[int]int)
|
||||
roleMenuMap = make(map[int][]int)
|
||||
addRoleMenuMap = make(map[int][]int)
|
||||
deleteRoleMenuMap = make(map[int][]int)
|
||||
)
|
||||
for _, v := range menuIDs {
|
||||
menuIDMap[v] = 1
|
||||
}
|
||||
roleMenus, err := dao.GetRoleMenu(db, roleIDs, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(roleMenus) > 0 {
|
||||
for _, v := range roleMenus {
|
||||
roleMenuMap[v.RoleID] = append(roleMenuMap[v.RoleID], v.MenuID)
|
||||
}
|
||||
}
|
||||
for _, roleID := range roleIDs {
|
||||
nowMenuIDs := roleMenuMap[roleID]
|
||||
for _, nowMenuID := range nowMenuIDs {
|
||||
if menuIDMap[nowMenuID] == 0 {
|
||||
deleteRoleMenuMap[roleID] = append(deleteRoleMenuMap[roleID], nowMenuID)
|
||||
}
|
||||
nowMenuIDMap[nowMenuID] = 1
|
||||
}
|
||||
for _, menuID := range menuIDMap {
|
||||
if nowMenuIDMap[menuID] == 0 {
|
||||
addRoleMenuMap[menuID] = append(addRoleMenuMap[menuID], menuID)
|
||||
}
|
||||
}
|
||||
}
|
||||
dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
dao.Rollback(db)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if len(addRoleMenuMap) > 0 {
|
||||
for roleID, menuIDs := range addRoleMenuMap {
|
||||
for _, menuID := range menuIDs {
|
||||
roleMenu := &model.RoleMenu{
|
||||
RoleID: roleID,
|
||||
MenuID: menuID,
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(roleMenu, ctx.GetUserName())
|
||||
err = dao.CreateEntity(db, roleMenu)
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(deleteRoleMenuMap) > 0 {
|
||||
for roleID, menuIDs := range deleteRoleMenuMap {
|
||||
for _, menuID := range menuIDs {
|
||||
roleMenus, _ := dao.GetRoleMenu(db, []int{roleID}, []int{menuID})
|
||||
if len(roleMenus) > 0 {
|
||||
roleMenus[0].DeletedAt = time.Now()
|
||||
roleMenus[0].LastOperator = ctx.GetUserName()
|
||||
_, err = dao.UpdateEntity(db, roleMenus[0], "DeletedAt", "LastOperator")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dao.Commit(db)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user