From b9c4a71fdeb756f5a7666a2c833117f6df509d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 28 Sep 2020 16:51:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=92=E8=89=B2=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/permission.go | 74 +++++++++++++++++++++++++++ business/model/dao/permission.go | 21 ++++++++ controllers/permission.go | 36 ++++++++++++- routers/commentsRouter_controllers.go | 18 +++++++ 4 files changed, 148 insertions(+), 1 deletion(-) diff --git a/business/jxstore/cms/permission.go b/business/jxstore/cms/permission.go index c2626a82e..7cde7cb93 100644 --- a/business/jxstore/cms/permission.go +++ b/business/jxstore/cms/permission.go @@ -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 +} diff --git a/business/model/dao/permission.go b/business/model/dao/permission.go index a9b747f69..42b14bc8c 100644 --- a/business/model/dao/permission.go +++ b/business/model/dao/permission.go @@ -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 +} diff --git a/controllers/permission.go b/controllers/permission.go index e5d16b7b1..d149b5715 100644 --- a/controllers/permission.go +++ b/controllers/permission.go @@ -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 + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index d2cf9ea4b..44e4a0ffe 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -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",