From 124f5426f07f785c94a16f0070068bcc70597011 Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Tue, 30 May 2023 13:16:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/version1/entry.go | 8 +- api/version1/grantpowers/postpower.go | 150 ++++++++++++++++++++++++++ api/version1/grantpowers/type.go | 41 +++++++ api/version1/menus/menus.go | 56 +++++++--- api/version1/menus/type.go | 7 ++ apirouter/entry.go | 10 +- apirouter/v1/grantsystempower/pc.go | 20 ++++ apirouter/v1/grantsystempower/type.go | 4 + initialization/route/initRoute.go | 3 + overall/publicmethod/technique.go | 1 + overall/publicmethod/type.go | 1 + 11 files changed, 278 insertions(+), 23 deletions(-) create mode 100644 api/version1/grantpowers/postpower.go create mode 100644 api/version1/grantpowers/type.go create mode 100644 apirouter/v1/grantsystempower/pc.go create mode 100644 apirouter/v1/grantsystempower/type.go diff --git a/api/version1/entry.go b/api/version1/entry.go index c6e1a92..edec64f 100644 --- a/api/version1/entry.go +++ b/api/version1/entry.go @@ -2,14 +2,16 @@ package version1 import ( "appPlatform/api/version1/dict" + "appPlatform/api/version1/grantpowers" "appPlatform/api/version1/menus" "appPlatform/api/version1/user" ) type ApiEntry struct { - UserApi user.ApiMethod //人员信息 - MenusApi menus.ApiMethod //菜单路由 - DictApi dict.ApiMethod //字典 + UserApi user.ApiMethod //人员信息 + MenusApi menus.ApiMethod //菜单路由 + DictApi dict.ApiMethod //字典 + GranSystemPowerApi grantpowers.ApiMethod //系统授权 } var AppApiEntry = new(ApiEntry) diff --git a/api/version1/grantpowers/postpower.go b/api/version1/grantpowers/postpower.go new file mode 100644 index 0000000..099f68f --- /dev/null +++ b/api/version1/grantpowers/postpower.go @@ -0,0 +1,150 @@ +package grantpowers + +import ( + "appPlatform/models/modelAppPlatform" + "appPlatform/models/modelsschool" + "appPlatform/models/modelsstorage" + "appPlatform/models/modelssystempermission" + "appPlatform/overall" + "appPlatform/overall/publicmethod" + "fmt" + "strconv" + "strings" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-29 16:07:22 +@ 功能: 获取岗位已配置的权限 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) GetPostGrantPowers(c *gin.Context) { + var requestData GetPostPowerCont + err := c.ShouldBindJSON(&requestData) + if err != nil { + publicmethod.Result(100, err, c) + return + } + if requestData.OrdId == "" || requestData.OrdId == "0" { + publicmethod.Result(1, requestData, c, "未知行政组织!不可进行配权") + return + } + if requestData.PostId == "" || requestData.PostId == "0" { + publicmethod.Result(1, requestData, c, "未知岗位!不可进行配权") + return + } + if requestData.SystemName == "" { + publicmethod.Result(1, requestData, c, "未知配权系统!不可进行配权") + return + } + var powerList []string + var empowerCont modelssystempermission.Empower + err = empowerCont.GetCont(map[string]interface{}{"`ordid`": requestData.OrdId, "`post_id`": requestData.PostId, "`system`": requestData.SystemName}, "`id`", "`point_id`", "`operation`") + if err != nil { + publicmethod.Result(0, powerList, c) + return + } + switch requestData.SystemName { + case "kpi": + if empowerCont.PointId != "" || empowerCont.Operation != "" { + powerAry := strings.Split(empowerCont.PointId, ",") + opeartionAry := strings.Split(empowerCont.Operation, ",") + powerList = GetSysKpiMenuPower(powerAry, opeartionAry) + } + case "cangchu": + if empowerCont.PointId != "" { + powerAry := strings.Split(empowerCont.PointId, ",") + powerList = GetWmsMenuPower(powerAry) + } + default: + if empowerCont.PointId != "" { + powerAry := strings.Split(empowerCont.PointId, ",") + powerList = GetSysAppMenuPower(powerAry) + } + + } + publicmethod.Result(0, powerList, c) +} + +/* +获取平台菜单权限 +@menusPower 以获得的权限 +*/ +func GetSysAppMenuPower(menusPower []string) (powersList []string) { + var permList []int64 + err := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Menus{}).Select("`perm`").Where("visible IN ?", []int{1, 2}).Find(&permList).Error + if err != nil { + return + } + for _, v := range permList { + permStr := strconv.FormatInt(v, 10) + if publicmethod.IsInTrue[string](permStr, menusPower) { + powersList = append(powersList, fmt.Sprintf("m_%v", permStr)) + } + } + return +} + +/* +获取KPI菜单权限 +@menusPower 以获得的权限 +@operPower 以获得的权限 +*/ +func GetSysKpiMenuPower(menusPower, operPower []string) (powersList []string) { + var menuList []int64 + overall.CONSTANT_DB_Master.Model(&modelsschool.SystemMenuSchool{}).Select("m_id").Where("`m_steat` = 1").Order("`m_sort` ASC").Order("`m_sort` ASC").Order("`m_id` DESC").Find(&menuList) + fmt.Printf("menuList--->%v\n", menuList) + if len(menuList) > 0 { + for _, mv := range menuList { + permStr := strconv.FormatInt(mv, 10) + if publicmethod.IsInTrue[string](permStr, menusPower) { + powersList = append(powersList, fmt.Sprintf("m_%v", permStr)) + } + } + } + var operList []modelsschool.MenuOperation + overall.CONSTANT_DB_Master.Order("menu_id asc").Find(&operList) + fmt.Printf("operList--->%v\n", operList) + if len(operList) > 0 { + for _, ov := range operList { + operIdStr := strconv.FormatInt(ov.OperId, 10) + menuIdStr := strconv.FormatInt(ov.MenuId, 10) + if publicmethod.IsInTrue[string](operIdStr, operPower) { + powersList = append(powersList, fmt.Sprintf("o_%v_%v", menuIdStr, operIdStr)) + } + } + } + return +} + +/* +获取仓储菜单权限 +@menusPower 以获得的权限 +*/ +func GetWmsMenuPower(menusPower []string) (powersList []string) { + var permList []int64 + err := overall.CONSTANT_DB_AppPlatform.Model(&modelsstorage.AccesstoAddress{}).Select("`id`").Where("`state` = 1").Find(&permList).Error + if err != nil { + return + } + for _, v := range permList { + permStr := strconv.FormatInt(v, 10) + if publicmethod.IsInTrue[string](permStr, menusPower) { + powersList = append(powersList, fmt.Sprintf("m_%v", permStr)) + } + } + return +} diff --git a/api/version1/grantpowers/type.go b/api/version1/grantpowers/type.go new file mode 100644 index 0000000..f33da54 --- /dev/null +++ b/api/version1/grantpowers/type.go @@ -0,0 +1,41 @@ +package grantpowers + +import ( + "appPlatform/overall/publicmethod" + + "github.com/gin-gonic/gin" +) + +type ApiMethod struct{} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-29 11:57:53 +@ 功能: 系统授权 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) Index(c *gin.Context) { + outputCont := publicmethod.MapOut[string]() + outputCont["index"] = "系统授权" + publicmethod.Result(0, outputCont, c) +} + +/* +根据系统获取岗位已配置的权限 +*/ +type GetPostPowerCont struct { + OrdId string `json:"ordid"` //行政组织 + PostId string `json:"postid"` //岗位 + SystemName string `json:"name"` //系统识别符 +} diff --git a/api/version1/menus/menus.go b/api/version1/menus/menus.go index 7e36191..a9ef10e 100644 --- a/api/version1/menus/menus.go +++ b/api/version1/menus/menus.go @@ -4,6 +4,7 @@ import ( "appPlatform/models/modelAppPlatform" "appPlatform/overall" "appPlatform/overall/publicmethod" + "fmt" "time" "github.com/gin-gonic/gin" @@ -55,12 +56,16 @@ func (a *ApiMethod) GetMenusThree(c *gin.Context) { # */ func (a *ApiMethod) GetMenusListTree(c *gin.Context) { - var requestData ShearMenu - c.ShouldBindJSON(&requestData) + // var requestData ShearMenu + // c.ShouldBindJSON(&requestData) + // c.ShouldBindQuery(&requestData) + // id := c.Query("id") + requestData := c.Query("keywords") + fmt.Printf("没有路由!=====>%v\n", requestData) var menusList []modelAppPlatform.Menus gormDb := overall.CONSTANT_DB_AppPlatform.Where("visible IN ?", []int{1, 2}) - if requestData.Title != "" { - gormDb = gormDb.Where("`name` LIKE ?", "%"+requestData.Title+"%") + if requestData != "" { + gormDb = gormDb.Where("`name` LIKE ?", "%"+requestData+"%") } err := gormDb.Find(&menusList).Error if err != nil && len(menusList) < 1 { @@ -131,17 +136,27 @@ func (a *ApiMethod) AddNewMenu(c *gin.Context) { } types := publicmethod.MenuTypeToInt(requestData.Types) var menuCont modelAppPlatform.Menus - menuCont.Name = requestData.Name //菜单名称"` - menuCont.Types = types //菜单类型(1-菜单;2-目录;3-外链;4-按钮权限"` - menuCont.Path = requestData.Path //路由路径"` - menuCont.Component = requestData.Component //组件路径(vue页面完整路径,省略.vue后缀)"` - menuCont.Perm = publicmethod.GetUUid(3) //权限标识"` - menuCont.Visible = requestData.Visible //显示状态(1:显示;2:隐藏,3:删除)"` - menuCont.Sort = requestData.Sort //排序(数字越小排名越靠前))"` - menuCont.Icon = requestData.Icon //菜单图标"` - menuCont.Redirect = requestData.Redirect //跳转路径"` - menuCont.ParentId = requestData.ParentId //父菜单ID"` - menuCont.Time = time.Now().Unix() //创建时间"` + menuCont.Name = requestData.Name //菜单名称"` + menuCont.Types = types //菜单类型(1-菜单;2-目录;3-外链;4-按钮权限"` + menuCont.Path = requestData.Path //路由路径"` + if types == 2 { + if requestData.ParentId == 0 { + menuCont.Component = "Layout" //组件路径(vue页面完整路径,省略.vue后缀)"` + } else { + menuCont.Component = "public/index" //组件路径(vue页面完整路径,省略.vue后缀)"` + } + + } else { + menuCont.Component = requestData.Component //组件路径(vue页面完整路径,省略.vue后缀)"` + } + + menuCont.Perm = publicmethod.GetUUid(3) //权限标识"` + menuCont.Visible = requestData.Visible //显示状态(1:显示;2:隐藏,3:删除)"` + menuCont.Sort = requestData.Sort //排序(数字越小排名越靠前))"` + menuCont.Icon = requestData.Icon //菜单图标"` + menuCont.Redirect = requestData.Redirect //跳转路径"` + menuCont.ParentId = requestData.ParentId //父菜单ID"` + menuCont.Time = time.Now().Unix() //创建时间"` err := overall.CONSTANT_DB_AppPlatform.Create(&menuCont).Error if err != nil { publicmethod.Result(104, err, c) @@ -252,7 +267,16 @@ func (a *ApiMethod) EditMenusCont(c *gin.Context) { editCont["path"] = requestData.Path } if requestData.Component != menuCont.Component { - editCont["component"] = requestData.Component + if types != menuCont.Types && types == 2 { + if requestData.ParentId != 0 { + editCont["component"] = "public/index" + } else { + editCont["component"] = "Layout" + } + } else { + editCont["component"] = requestData.Component + } + } if requestData.Visible == 0 { requestData.Visible = 1 diff --git a/api/version1/menus/type.go b/api/version1/menus/type.go index 64c78c3..08ea5c3 100644 --- a/api/version1/menus/type.go +++ b/api/version1/menus/type.go @@ -1,6 +1,7 @@ package menus import ( + "appPlatform/models/modelAppPlatform" "appPlatform/overall/publicmethod" "sync" @@ -63,3 +64,9 @@ type EditMenuCont struct { type GetSunMenus struct { Id []int `json:"id"` //菜单Id } + +// 输出菜单树 +type SendMenusThrees struct { + modelAppPlatform.Menus + PermCode string `json:"permcode"` +} diff --git a/apirouter/entry.go b/apirouter/entry.go index 3cfcacc..1e2ec95 100644 --- a/apirouter/entry.go +++ b/apirouter/entry.go @@ -3,16 +3,18 @@ package apirouter import ( "appPlatform/apirouter/apishiyan" dictrouters "appPlatform/apirouter/v1/dict_routers" + "appPlatform/apirouter/v1/grantsystempower" menusrouters "appPlatform/apirouter/v1/menusRouters" userrouters "appPlatform/apirouter/v1/userRouters" ) // 路由结构 type RouterGroup struct { - ShiyanApi apishiyan.ApiRouter - UserRouter userrouters.ApiRouter - MenusRouter menusrouters.ApiRouter - DictRouter dictrouters.ApiRouter + ShiyanApi apishiyan.ApiRouter + UserRouter userrouters.ApiRouter + MenusRouter menusrouters.ApiRouter + DictRouter dictrouters.ApiRouter + GrantPowerRouter grantsystempower.ApiRouter } var RouterGroupEntry = new(RouterGroup) diff --git a/apirouter/v1/grantsystempower/pc.go b/apirouter/v1/grantsystempower/pc.go new file mode 100644 index 0000000..a4efc7c --- /dev/null +++ b/apirouter/v1/grantsystempower/pc.go @@ -0,0 +1,20 @@ +package grantsystempower + +import ( + "appPlatform/api/version1" + + "github.com/gin-gonic/gin" +) + +// 权力配置 +func (a *ApiRouter) RouterGroupPc(router *gin.RouterGroup) { + apiRouter := router.Group("grant") + + var methodBinding = version1.AppApiEntry.GranSystemPowerApi + { + apiRouter.GET("", methodBinding.Index) //入口 + apiRouter.POST("", methodBinding.Index) //入口 + apiRouter.POST("get_post_grant_powers", methodBinding.GetPostGrantPowers) //获取岗位已配置的权限 + + } +} diff --git a/apirouter/v1/grantsystempower/type.go b/apirouter/v1/grantsystempower/type.go new file mode 100644 index 0000000..a9faaa0 --- /dev/null +++ b/apirouter/v1/grantsystempower/type.go @@ -0,0 +1,4 @@ +package grantsystempower + +//菜单路由 +type ApiRouter struct{} diff --git a/initialization/route/initRoute.go b/initialization/route/initRoute.go index 4a7d065..6ffcee7 100644 --- a/initialization/route/initRoute.go +++ b/initialization/route/initRoute.go @@ -48,6 +48,9 @@ func InitialRouter() *gin.Engine { //字典 dictRouterApi := apirouter.RouterGroupEntry.DictRouter dictRouterApi.RouterGroupPc(VerifyIdentity) + //配置权限路由 + trantPowersRouterApi := apirouter.RouterGroupEntry.GrantPowerRouter + trantPowersRouterApi.RouterGroupPc(VerifyIdentity) } //验证身份接口 无需鉴权Url(主要web端使用) diff --git a/overall/publicmethod/technique.go b/overall/publicmethod/technique.go index e22f690..d2fb028 100644 --- a/overall/publicmethod/technique.go +++ b/overall/publicmethod/technique.go @@ -2189,6 +2189,7 @@ func GetAppMenuThree(parentId int, threeData []modelAppPlatform.Menus) []AppMenu node.ParentId = v.ParentId //父菜单ID"` node.Time = v.Time //创建时间"` node.Class = MenuType(v.Types) + node.PermCode = strconv.FormatInt(v.Perm, 10) node.Children = child //子路由列表 // // fmt.Printf("GetMenuThree-22222--%v--->%v\n", v.Id, node) treeList = append(treeList, node) diff --git a/overall/publicmethod/type.go b/overall/publicmethod/type.go index aadbb30..46c0e4e 100644 --- a/overall/publicmethod/type.go +++ b/overall/publicmethod/type.go @@ -317,6 +317,7 @@ type MenusRouterThreeMet struct { type AppMenusThree struct { modelAppPlatform.Menus + PermCode string `json:"permcode"` Class string `json:"class"` //类型对照 Children []AppMenusThree `json:"children"` //子路由列表 }