修改角色菜单

This commit is contained in:
苏尹岚
2020-09-28 16:51:08 +08:00
parent bc6ab1dd04
commit b9c4a71fde
4 changed files with 148 additions and 1 deletions

View File

@@ -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
}

View File

@@ -70,3 +70,24 @@ func GetUserRole(db *DaoDB, userIDs []string, roleIDs []int) (userRoles []*model
err = GetRows(db, &userRoles, sql, sqlParams)
return userRoles, err
}
func GetRoleMenu(db *DaoDB, roleIDs, menuIDs []int) (roleMenus []*model.RoleMenu, err error) {
sql := `
SELECT *
FROM role_menu
WHERE deleted_at = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if len(roleIDs) > 0 {
sql += " AND role_id IN (" + GenQuestionMarks(len(roleIDs)) + ")"
sqlParams = append(sqlParams, roleIDs)
}
if len(menuIDs) > 0 {
sql += " AND menu_id IN (" + GenQuestionMarks(len(menuIDs)) + ")"
sqlParams = append(sqlParams, menuIDs)
}
err = GetRows(db, &roleMenus, sql, sqlParams)
return roleMenus, err
}

View File

@@ -108,7 +108,7 @@ func (c *PowerController) UpdateRole() {
// @Title 查询用户角色
// @Description查询用户角色
// @Param token header string true "认证token"
// @Param userID formData string false "用户ID"
// @Param userID query string false "用户ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetUserRole [get]
@@ -139,3 +139,37 @@ func (c *PowerController) UpdateUserRole() {
return retVal, "", err
})
}
// @Title 查询角色菜单
// @Description 查询角色菜单
// @Param token header string true "认证token"
// @Param roleID query int false "用户ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetRoleMenu [get]
func (c *PowerController) GetRoleMenu() {
c.callGetRoleMenu(func(params *tPowerGetRoleMenuParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetRoleMenu(params.Ctx, params.RoleID)
return retVal, "", err
})
}
// @Title 修改角色菜单
// @Description 修改角色菜单
// @Param token header string true "认证token"
// @Param roleIDs formData string true "角色IDs"
// @Param menuIDs formData string true "菜单IDs"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateRoleMenu [put]
func (c *PowerController) UpdateRoleMenu() {
c.callUpdateRoleMenu(func(params *tPowerUpdateRoleMenuParams) (retVal interface{}, errCode string, err error) {
var (
roleIDs, menuIDs []int
)
if err = jxutils.Strings2Objs(params.RoleIDs, &roleIDs, params.MenuIDs, &menuIDs); err == nil {
err = cms.UpdateRoleMenu(params.Ctx, roleIDs, menuIDs)
}
return retVal, "", err
})
}

View File

@@ -1467,6 +1467,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"],
beego.ControllerComments{
Method: "GetRoleMenu",
Router: `/GetRoleMenu`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"],
beego.ControllerComments{
Method: "GetUserRole",
@@ -1494,6 +1503,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"],
beego.ControllerComments{
Method: "UpdateRoleMenu",
Router: `/UpdateRoleMenu`,
AllowHTTPMethods: []string{"put"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PowerController"],
beego.ControllerComments{
Method: "UpdateUserRole",