From 7179db645b8003614a12568492ba5ae39e6c5b02 Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Fri, 19 Dec 2025 16:09:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=88=E6=9D=83=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/version1/grantpowers/menuPower.go | 85 ++++ api/version1/grantpowers/myAppPower.go | 6 +- api/version1/grantpowers/postpower.go | 475 ++++++++++++++++++ api/version1/grantpowers/type.go | 64 +++ api/version1/setupRoule/power.go | 2 +- api/version1/user/setPower.go | 94 +++- api/version1/user/type.go | 4 +- api/version1/user/userCont.go | 2 +- apirouter/v1/grantsystempower/pc.go | 4 + config/configDatabase/database_5.241.yaml | 339 +++++++++++++ go.mod | 2 +- .../auth_group_power.go | 1 + overall/publicmethod/technique.go | 3 + 13 files changed, 1062 insertions(+), 19 deletions(-) create mode 100644 api/version1/grantpowers/menuPower.go create mode 100644 config/configDatabase/database_5.241.yaml diff --git a/api/version1/grantpowers/menuPower.go b/api/version1/grantpowers/menuPower.go new file mode 100644 index 0000000..745ccc1 --- /dev/null +++ b/api/version1/grantpowers/menuPower.go @@ -0,0 +1,85 @@ +package grantpowers + +import ( + "appPlatform/models/modelssystempermission" + "appPlatform/overall" + "encoding/json" + "strconv" + "time" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-18 16:30:08 +@ 功能: 解析自定义App菜单列表 +*/ +func (a *AppMenuAry) AppMenuTreeSubNew(AppMenuTree []AppMenuTreeInit, uuid int64) { + if len(AppMenuTree) > 0 { + for _, v := range AppMenuTree { + var menuInfo AppMenuInfo + menuInfo.Id = v.Id //识别符 + menuInfo.Name = v.Name //名称 + menuInfo.ParentId = v.ParentId //上级 + menuInfo.IsPick = v.IsPick //是否激活 + menuInfo.IsTrue = v.IsTrue //是否选中 + menuInfo.AppKey = v.AppKey + menuInfo.PagePower = v.PagePower + menuInfo.FormPower = v.FormPower + menuInfo.ListPower = v.ListPower + menuInfo.VisibleRange = v.VisibleRange + menuInfo.MenuType = v.MenuType + a.List = append(a.List, menuInfo) + EditAppMenuPoserSave(uuid, menuInfo) + if len(v.Children) > 0 { + a.AppMenuTreeSubNew(v.Children, uuid) + } + } + } +} + +func EditAppMenuPoserSave(uuid int64, v AppMenuInfo) { + // json, _ := json.Marshal(a.List) + // fmt.Printf("\n\n%v----------------->%v\n\n", uuid, string(json)) + + var saveInfo modelssystempermission.PowerInfo + saveInfo.AuthId = uuid //归属权限 + saveInfo.ItemId, _ = strconv.ParseInt(v.Id, 10, 64) //项目ID + if v.IsTrue { + saveInfo.IsPick = 1 //是否有权(1:有;非1:无) + } else { + saveInfo.IsPick = 0 //是否有权(1:有;非1:无) + } + + tpAry := MyCreateTablePower(v.FormPower) + if tpAry == "null" { + tpAry = "[]" + } + saveInfo.TablePower = tpAry //表单权限 + lpAry := MyCreateTablePower(v.ListPower) + if lpAry == "null" { + lpAry = "[]" + } + saveInfo.ListPower = lpAry //列表权限 + + pgButAry := MyCreateTablePower(v.PagePower) + if pgButAry == "null" { + pgButAry = "[]" + } + saveInfo.PageButPower = pgButAry //列表权限 + inStr := strconv.FormatInt(v.VisibleRange.Types, 10) + intVal, _ := strconv.Atoi(inStr) + saveInfo.VisibleRange = intVal //可见范围(1:本人;2:本岗位;3:本部门;4:本分部;5:指定行政组织;6:所有) + if len(v.VisibleRange.Attribute) > 0 { + visibleOrgStr, _ := json.Marshal(v.VisibleRange.Attribute) + saveInfo.VisibleOrg = string(visibleOrgStr) //可见范围辅助参数 + } else { + saveInfo.VisibleOrg = "[]" + } + + saveInfo.ButPower = "[]" //按钮权限 + saveInfo.Time = time.Now().Unix() //编辑时间 + + overall.CONSTANT_DB_System_Permission.Create(&saveInfo) + +} diff --git a/api/version1/grantpowers/myAppPower.go b/api/version1/grantpowers/myAppPower.go index 90f5f74..62fdeae 100644 --- a/api/version1/grantpowers/myAppPower.go +++ b/api/version1/grantpowers/myAppPower.go @@ -35,7 +35,7 @@ func (a *ApiMethod) GainAppEmpowerPower(c *gin.Context) { powerInfo, formButPowerList := publicmethod.GetSystemPower(requestData.PowerType, requestData.AppType, requestData.RoleId, requestData.Id) var appMenuList []modelAppPlatform.Appmenus - overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Appmenus{}).Where("`isLock` = 2 AND `appkey` = ?", appSignCode).Find(&appMenuList) + overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Appmenus{}).Where("`state` = 1 AND `isLock` = 2 AND `appkey` = ?", appSignCode).Find(&appMenuList) var sendList []CusterAppTablePower for _, v := range appMenuList { powerInfo, isOk := CallBackAppMenuPower(v, powerInfo.PowerList) @@ -63,8 +63,8 @@ func (a *ApiMethod) GainAppEmpowerPower(c *gin.Context) { } } outData := publicmethod.MapOut[string]() - // outData["list"] = AppMenuTree(appSignCode, sendList) - outData["list"] = sendList + outData["list"] = AppMenuTree(appSignCode, sendList) + // outData["list"] = sendList outData["groupButPower"] = []string{} outData["formButPower"] = formButPowerList //获取app按钮控制 diff --git a/api/version1/grantpowers/postpower.go b/api/version1/grantpowers/postpower.go index f01a3a9..2a11926 100644 --- a/api/version1/grantpowers/postpower.go +++ b/api/version1/grantpowers/postpower.go @@ -9,6 +9,7 @@ import ( "appPlatform/overall/publicmethod" "encoding/json" "fmt" + "sort" "strconv" "strings" "time" @@ -642,3 +643,477 @@ func CallBackAppMenuPower(tableInfo modelAppPlatform.Appmenus, powerList []publi } return } + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-17 10:00:38 +@ 功能: 初始化应用授权选项 +*/ +func (a *ApiMethod) AppInitAuthorization(c *gin.Context) { + var requestData GainAppIdAndRoleNew + c.ShouldBindJSON(&requestData) + if requestData.PowerType == "" { + requestData.PowerType = "org" + } + if requestData.AppType == "" { + requestData.AppType = "system" + } + if requestData.RoleId == "" { + requestData.RoleId = "0" + } + var groupPower modelssystempermission.AuthGroupPower + groupPower.GetCont(map[string]interface{}{"`appType`": requestData.AppType, "`orgPowerType`": requestData.PowerType, "`orgOrUserKey`": requestData.RoleId}) + + //Step1:获取分组 + var groupIsTrue []string + if groupPower.GroupStatus != "" { + json.Unmarshal([]byte(groupPower.GroupStatus), &groupIsTrue) + } + + var AppPowerInfo []AppGroupInfo + + var groupInfo modelAppPlatform.CustomerFormGroup + groupAry, _ := groupInfo.ContMap("`state` = 1") + //进行排序 + sort.Slice(groupAry, func(i, j int) bool { + return groupAry[i].Sort < groupAry[j].Sort + }) + for _, v := range groupAry { + groupId := strconv.FormatInt(v.Id, 10) + var groupCont AppGroupInfo + groupCont.Id = groupId //识别符 + groupCont.Name = v.Title //名称 + groupCont.ParentId = strconv.FormatInt(v.Superior, 10) //上级 + groupCont.IsPick = false //是否激活 + fmt.Printf("%v----%v---%v\n\n\n", groupId, groupIsTrue, publicmethod.IsInTrue[string](groupId, groupIsTrue)) + groupCont.IsTrue = publicmethod.IsInTrue[string](groupId, groupIsTrue) //是否选中 + groupCont.AppList = GetGroupApp(v.Id, requestData.PowerType, requestData.AppType, requestData.RoleId, requestData.Id) + // syncSeting.Add(1) + // go groupCont.GetGroupApp() + AppPowerInfo = append(AppPowerInfo, groupCont) + } + syncSeting.Wait() + sendData := publicmethod.MapOut[string]() + sendData["groupButPower"] = []string{} + + if groupPower.PowerInfo != "" { + var butPower []string + json.Unmarshal([]byte(groupPower.PowerInfo), &butPower) + // fmt.Printf("\n\nbutPower---------->%v\n\n", butPower) + sendData["groupButPower"] = butPower + } + sendData["appList"] = AppPowerInfo + publicmethod.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-17 11:08:15 +@ 功能: 获取分组App +*/ +// func (a *AppGroupInfo) GetGroupApp() { +func GetGroupApp(uuId int64, powerType, appType, powerId, systemId string) (appAry []AppInfoPower) { + // defer syncSeting.Done() + var appList []modelAppPlatform.CustomerForm + overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.CustomerForm{}).Select("`id`,`signCode` ,`name`,`tablename`").Where("`classify` = 3 AND `states` = 1 AND `groupid` = ?", uuId).Find(&appList) + for _, v := range appList { + // fmt.Printf("获取分组App----->%v----->%v\n\n", a.Id, len(appList)) + + var appCont AppInfoPower + appCont.Id = strconv.FormatInt(v.SignCode, 10) //识别符 + appCont.Name = v.Name //名称 + appCont.ParentId = strconv.FormatInt(v.Groupid, 10) //上级 + appCont.IsPick = false + var authId []int64 + appCont.IsTrue, appCont.OperationButton, authId = AppCallBackShow(v.SignCode, powerType, appType, powerId) //是否选中 + appCont.AppMenuTree = AppMenuList(v.SignCode, authId, powerType, appType, powerId, systemId) + appAry = append(appAry, appCont) + } + + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-19 11:27:42 +@ 功能: 获取APP回显是否选中 + + #appId Id + #powerType 授权类型 + #appType 授权系统 + #powerId 项目Id +*/ +func AppCallBackShow(appId int64, powerType, appType, powerId string) (isTrue bool, butPower []string, authId []int64) { + isTrue = false + + var authPower modelssystempermission.AuthPower + authPower.GetCont(map[string]interface{}{"`appType`": appType, "`orgPowerType`": powerType, "`orgOrUserKey`": powerId, "`appKey`": appId}, "`id`", "`isTrue`", "`appButPower`") + if authPower.Id == 0 { + if powerType == "person" { + var authPower []modelssystempermission.AuthPower + overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.AuthPower{}).Where(" `orgPowerType` IN ('org','job','role') AND `appType` = ? AND `orgOrUserKey` = ? AND `appKey` = ?", appType, powerId, appId).Find(&authPower) + + if len(authPower) > 0 { + var allButAry []string + for _, v := range authPower { + if v.IsTrue == 1 { + isTrue = true + authId = append(authId, v.Id) + } + if v.AppButPower != "" && v.AppButPower != "null" { + var appButAry []string + json.Unmarshal([]byte(v.AppButPower), &appButAry) + allButAry = append(allButAry, appButAry...) + } + } + if len(allButAry) > 0 { + for _, av := range allButAry { + if !publicmethod.IsInTrue(av, butPower) { + butPower = append(butPower, av) + } + } + } + } + } + return + } + authId = append(authId, authPower.Id) + if authPower.IsTrue == 1 { + isTrue = true + } + if authPower.AppButPower != "" && authPower.AppButPower != "null" { + json.Unmarshal([]byte(authPower.AppButPower), &butPower) + } + + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-17 11:28:31 +@ 功能: 获取app菜单 +*/ +func AppMenuList(appId int64, authId []int64, powerType, appType, powerId, systemId string) (menuTree []AppMenuTreeInit) { + var appMenuList []modelAppPlatform.Appmenus + err := overall.CONSTANT_DB_AppPlatform.Where("`state` = 1 AND `isLock` = 2 AND `appkey` = ?", appId).Find(&appMenuList).Error + if err != nil { + return + } + sort.Slice(appMenuList, func(i, j int) bool { + return appMenuList[i].EditTime < appMenuList[j].EditTime + }) + sort.Slice(appMenuList, func(i, j int) bool { + return appMenuList[i].Sort < appMenuList[j].Sort + }) + menuTree = AppTreeMenus(appId, authId, appMenuList) + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-04-23 13:42:51 +@ 功能: App菜单树处理 +*/ +func AppTreeMenus(parentId int64, authId []int64, menuList []modelAppPlatform.Appmenus) (menusTree []AppMenuTreeInit) { + for _, v := range menuList { + if v.Parent == parentId { + var menuCont AppMenuTreeInit + menuCont.Id = strconv.FormatInt(v.Id, 10) // + menuCont.Name = v.Label //名称 + menuCont.ParentId = strconv.FormatInt(v.Parent, 10) //上级 + menuCont.AppKey = strconv.FormatInt(v.Appkey, 10) + menuCont.IsPick = false //是否激活 + menuCont.IsTrue = false //是否选中 + menuCont.MenuType = v.Types + menuCont.VisibleRange.Types = 1 + menuCont.IsTrue, menuCont.PagePower, menuCont.ListPower, menuCont.FormPower, menuCont.VisibleRange.Types, menuCont.VisibleRange.Attribute = AppMenuCallBackShow(v.Id, authId) + menuCont.Children = AppTreeMenus(v.Id, authId, menuList) + menusTree = append(menusTree, menuCont) + } + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-19 11:27:42 +@ 功能: 获取APP中菜单回显是否选中 + + #appId Id + #powerType 授权类型 + #appType 授权系统 + #powerId 项目Id +*/ +func AppMenuCallBackShow(menuId int64, authId []int64) (isTrue bool, pagePower, ListPower, FormPower []string, types int64, userPower []int64) { + isTrue = false + var menuPower []modelssystempermission.PowerInfo + overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.PowerInfo{}).Where(" `authId` IN ? AND `appType` = ? AND `itemId` = ? ", authId, menuId).Find(&menuPower) + for _, v := range menuPower { + if v.IsPick == 1 { + isTrue = true + } + if v.PageButPower != "" && v.PageButPower != "null" { + json.Unmarshal([]byte(v.PageButPower), &pagePower) + } + if v.TablePower != "" && v.TablePower != "null" { + json.Unmarshal([]byte(v.TablePower), &FormPower) + } + if v.ListPower != "" && v.ListPower != "null" { + json.Unmarshal([]byte(v.ListPower), &ListPower) + } + if types <= int64(v.VisibleRange) { + types = int64(v.VisibleRange) + } + if v.VisibleOrg != "" && v.VisibleOrg != "null" { + json.Unmarshal([]byte(v.VisibleOrg), &userPower) + } + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-18 14:39:53 +@ 功能: 选项卡App授权模式 +*/ +func (a *ApiMethod) TabsAuthorizationMode(c *gin.Context) { + var requestData SaveAppPower + c.ShouldBindJSON(&requestData) + if requestData.PowerType == "" { + publicmethod.Result(1, requestData, c, "未知授权类型!不可编辑权限!") + return + } + if requestData.AppType == "" { + publicmethod.Result(1, requestData, c, "未知授权系统!不可编辑权限!") + return + } + if requestData.RoleId == "" { + publicmethod.Result(1, requestData, c, "未知授权项!不可编辑权限!") + return + } + if len(requestData.ListPower) < 1 { + publicmethod.Result(1, requestData, c, "未知授权内容!不可编辑权限!") + return + } + var groupIdAry []string + for _, v := range requestData.ListPower { + if v.IsTrue { + if !publicmethod.IsInTrue(v.Id, groupIdAry) { + groupIdAry = append(groupIdAry, v.Id) + } + } + // if i == 0 { + // syncSeting.Add(1) + // go appPowerSetup(requestData.AppType, requestData.PowerType, requestData.RoleId, v.AppList) + // } + appPowerSetup(requestData.AppType, requestData.PowerType, requestData.RoleId, v.AppList) + } + + groupIsShow, _ := json.Marshal(groupIdAry) + //写入App分组权限 + var appGroupPower modelssystempermission.AuthGroupPower + err := appGroupPower.GetCont(map[string]interface{}{"`orgPowerType`": requestData.PowerType, "`appType`": requestData.AppType, "`orgOrUserKey`": requestData.RoleId}) + if err == nil && appGroupPower.Id != 0 { //编辑 + saveData := publicmethod.MapOut[string]() + saveData["groupStatus"] = string(groupIsShow) + saveData["time"] = time.Now().Unix() + var saveInfo modelssystempermission.AuthGroupPower + saveInfo.EiteCont(map[string]interface{}{"`id`": appGroupPower.Id}, saveData) + } else { //新增 + uuid := publicmethod.GetUUid(1) + var saveGroupPower modelssystempermission.AuthGroupPower + saveGroupPower.Id = uuid + saveGroupPower.AppType = requestData.AppType + saveGroupPower.OrgPowerType = requestData.PowerType + saveGroupPower.OrgOrUserKey, _ = strconv.ParseInt(requestData.RoleId, 10, 64) + saveGroupPower.Time = time.Now().Unix() + saveGroupPower.PowerInfo = "['xz','dl','bj','xzapp']" + saveGroupPower.GroupStatus = string(groupIsShow) + overall.CONSTANT_DB_System_Permission.Create(&saveGroupPower) + } + // syncSeting.Wait() + publicmethod.Result(0, err, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-18 15:32:49 +@ 功能: 批量处理App授权 + + #uuid 统一编码 + #appType 系统类型(system:系统平台;app:自定义表单与应用) + #powerType 赋权类型(org:组织;job:岗位;role:角色;person:个人) + #roleId 具体执行人 + #appList App列表 +*/ +func appPowerSetup(appType, powerType, roleId string, appList []AppInfoPower) { + // defer syncSeting.Done() + for _, v := range appList { + // if i == 0 { + uuid := publicmethod.GetUUid(1) + var appPowerInfo modelssystempermission.AuthPower + appPowerInfo.GetCont(map[string]interface{}{"`appType`": appType, "`orgPowerType`": powerType, "`orgOrUserKey`": roleId, "`appKey`": v.Id}) + appPowerJson, _ := json.Marshal(v.AppMenuTree) + if appPowerInfo.Id == 0 { //新增 + var newAppPowerInfo modelssystempermission.AuthPower + newAppPowerInfo.Id = uuid + newAppPowerInfo.OrgPowerType = powerType + newAppPowerInfo.OrgOrUserKey, _ = strconv.ParseInt(roleId, 10, 64) + newAppPowerInfo.AppType = appType + newAppPowerInfo.AppKey, _ = strconv.ParseInt(v.Id, 10, 64) + newAppPowerInfo.Time = time.Now().Unix() + if v.IsTrue { + newAppPowerInfo.IsTrue = 1 //1:有;非1:无) + } else { + newAppPowerInfo.IsTrue = 0 + } + newAppPowerInfo.PowerInfo = string(appPowerJson) + operAtionBut, _ := json.Marshal(v.OperationButton) + newAppPowerInfo.AppButPower = string(operAtionBut) + overall.CONSTANT_DB_System_Permission.Create(&newAppPowerInfo) + // var menuPowList AppMenuAry + // menuPowList.List = []AppMenuInfo{} + // menuPowList.AppMenuTreeSub(v.AppMenuTree) + // menuPowList.EditAppMenuPoser(uuid) + var oldPower modelssystempermission.PowerInfo + oldPower.DelCont(map[string]interface{}{"`authId`": uuid}) + var menuPowList AppMenuAry + menuPowList.List = []AppMenuInfo{} + menuPowList.AppMenuTreeSubNew(v.AppMenuTree, uuid) + } else { //编辑 + uuid = appPowerInfo.Id + saveData := publicmethod.MapOut[string]() + saveData["powerInfo"] = string(appPowerJson) + if v.IsTrue { + saveData["isTrue"] = 1 + } else { + saveData["isTrue"] = 0 + } + operAtionBut, _ := json.Marshal(v.OperationButton) + saveData["appButPower"] = string(operAtionBut) + saveData["time"] = time.Now().Unix() + var saveAppPowerInfo modelssystempermission.AuthPower + saveAppPowerInfo.EiteCont(map[string]interface{}{"`id`": appPowerInfo.Id}, saveData) + // var menuPowList AppMenuAry + // menuPowList.List = []AppMenuInfo{} + // menuPowList.AppMenuTreeSub(v.AppMenuTree) + // menuPowList.EditAppMenuPoser(appPowerInfo.Id) + var oldPower modelssystempermission.PowerInfo + oldPower.DelCont(map[string]interface{}{"`authId`": appPowerInfo.Id}) + var menuPowList AppMenuAry + menuPowList.List = []AppMenuInfo{} + menuPowList.AppMenuTreeSubNew(v.AppMenuTree, appPowerInfo.Id) + } + + // } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-18 16:51:04 +@ 功能: 将自定义App菜单权限写入数据库 +*/ +func (a *AppMenuAry) EditAppMenuPoser(uuid int64) { + json, _ := json.Marshal(a.List) + fmt.Printf("\n\n%v----------------->%v\n\n", uuid, string(json)) + var oldPower modelssystempermission.PowerInfo + oldPower.DelCont(map[string]interface{}{"`authId`": uuid}) + var insterAry []modelssystempermission.PowerInfo + for _, v := range a.List { + var saveInfo modelssystempermission.PowerInfo + saveInfo.AuthId = uuid //归属权限 + saveInfo.ItemId, _ = strconv.ParseInt(v.Id, 10, 64) //项目ID + if v.IsTrue { + saveInfo.IsPick = 1 //是否有权(1:有;非1:无) + } else { + saveInfo.IsPick = 0 //是否有权(1:有;非1:无) + } + + tpAry := MyCreateTablePower(v.FormPower) + if tpAry == "null" { + tpAry = "[]" + } + saveInfo.TablePower = tpAry //表单权限 + lpAry := MyCreateTablePower(v.ListPower) + if lpAry == "null" { + lpAry = "[]" + } + saveInfo.ListPower = lpAry //列表权限 + + pgButAry := MyCreateTablePower(v.PagePower) + if pgButAry == "null" { + pgButAry = "[]" + } + saveInfo.PageButPower = pgButAry //列表权限 + inStr := strconv.FormatInt(v.VisibleRange.Types, 10) + intVal, _ := strconv.Atoi(inStr) + saveInfo.VisibleRange = intVal //可见范围(1:本人;2:本岗位;3:本部门;4:本分部;5:指定行政组织;6:所有) + // visibleOrgStr, _ := json.Marshal(v.VisibleRange.Attribute) + // saveInfo.VisibleOrg = string(visibleOrgStr) //可见范围辅助参数 + saveInfo.ButPower = "[]" //按钮权限 + saveInfo.Time = time.Now().Unix() //编辑时间 + insterAry = append(insterAry, saveInfo) + } + if len(insterAry) > 0 { + overall.CONSTANT_DB_System_Permission.Create(&insterAry) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-11-20 11:39:52 +@ 功能: 解释自定义表单权限 +*/ +func MyCreateTablePower(powerList []string) string { + if len(powerList) <= 0 { + return "[]" + } + var powerAry []string + for _, v := range powerList { + if !publicmethod.IsInTrue[string](v, powerAry) { + powerAry = append(powerAry, v) + } + } + jsonStr, _ := json.Marshal(powerAry) + return string(jsonStr) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-18 16:30:08 +@ 功能: 解析自定义App菜单列表 +*/ +func (a *AppMenuAry) AppMenuTreeSub(AppMenuTree []AppMenuTreeInit) { + if len(AppMenuTree) > 0 { + for _, v := range AppMenuTree { + var menuInfo AppMenuInfo + menuInfo.Id = v.Id //识别符 + menuInfo.Name = v.Name //名称 + menuInfo.ParentId = v.ParentId //上级 + menuInfo.IsPick = v.IsPick //是否激活 + menuInfo.IsTrue = v.IsTrue //是否选中 + menuInfo.AppKey = v.AppKey + menuInfo.PagePower = v.PagePower + menuInfo.FormPower = v.FormPower + menuInfo.ListPower = v.ListPower + menuInfo.VisibleRange = v.VisibleRange + menuInfo.MenuType = v.MenuType + a.List = append(a.List, menuInfo) + if len(v.Children) > 0 { + a.AppMenuTreeSub(v.Children) + } + } + } +} diff --git a/api/version1/grantpowers/type.go b/api/version1/grantpowers/type.go index 1b7a319..68dcd9b 100644 --- a/api/version1/grantpowers/type.go +++ b/api/version1/grantpowers/type.go @@ -11,6 +11,7 @@ type ApiMethod struct{} // 协程设置 var syncSeting = sync.WaitGroup{} +var syncSetSun = sync.WaitGroup{} /* * @@ -175,3 +176,66 @@ type visibleRangeInfo struct { Typrs int `json:"typrs"` //可见范围 //1、本人;2、本岗位、3、本部门;4、本分部、5、指定行政组织;6、所有 Val []int `json:"val"` //自定义行政组织 } + +// 自定义App权限架构 +type AppPowerCont struct { + AppPower []string `json:"appPower"` + AppGroupList []AppGroupInfo `json:"appGroupList"` +} + +// 授权基础字段 +type PowerContInit struct { + Id string `json:"id"` //识别符 + Name string `json:"name"` //名称 + ParentId string `json:"parentId"` //上级 + IsPick bool `json:"isPick"` //是否激活 + IsTrue bool `json:"isTrue"` //是否选中 +} + +// App自定义分组 +type AppGroupInfo struct { + PowerContInit + AppList []AppInfoPower `json:"appList"` +} + +// App结构 +type AppInfoPower struct { + PowerContInit + OperationButton []string `json:"operationButton"` //按钮权限 + AppMenuTree []AppMenuTreeInit `json:"appMenuTree"` //应用菜单树 +} + +// 应用菜单树 +type AppMenuTreeInit struct { + PowerContInit + AppKey string `json:"appKey"` + PagePower []string `json:"pagePower"` + FormPower []string `json:"formPower"` + ListPower []string `json:"listPower"` + VisibleRange DatePowerInfo `json:"visibleRange"` + MenuType int `json:"menuType"` + Children []AppMenuTreeInit `json:"children"` +} + +// 提交授权 +type SaveAppPower struct { + AppType string `json:"appType"` + PowerType string `json:"powerType"` + RoleId string `json:"roleId"` + ListPower []AppGroupInfo `json:"listPower"` +} + +// 自定义App菜单列表 +type AppMenuInfo struct { + PowerContInit + AppKey string `json:"appKey"` + PagePower []string `json:"pagePower"` + FormPower []string `json:"formPower"` + ListPower []string `json:"listPower"` + VisibleRange DatePowerInfo `json:"visibleRange"` + MenuType int `json:"menuType"` +} + +type AppMenuAry struct { + List []AppMenuInfo `json:"list"` +} diff --git a/api/version1/setupRoule/power.go b/api/version1/setupRoule/power.go index cf6855f..5b5324f 100644 --- a/api/version1/setupRoule/power.go +++ b/api/version1/setupRoule/power.go @@ -27,7 +27,7 @@ func (a *ApiMethod) AppPowerUnit(c *gin.Context) { if requestData.RoleId == "" { requestData.RoleId = "0" } - powerInfo, _ := publicmethod.GetSystemPower(requestData.PowerType, requestData.AppSystem, requestData.RoleId, requestData.PowerType) + powerInfo, _ := publicmethod.GetSystemPower(requestData.PowerType, requestData.AppSystem, requestData.RoleId, requestData.AppId) var appPowerTrue []AppPowerTree switch requestData.AppSystem { default: diff --git a/api/version1/user/setPower.go b/api/version1/user/setPower.go index ef26fbc..ca3b8f7 100644 --- a/api/version1/user/setPower.go +++ b/api/version1/user/setPower.go @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "strconv" + "strings" ) /* @@ -17,9 +18,9 @@ import ( @ 时间: 2025-11-24 08:30:44 @ 功能: 获取个人系统权限 */ -func GetMyPower(powerType string, oupk, org, poetId int64) (allPower SendAllPower, err error) { +func GetMyPower(powerType, role string, oupk, org, poetId int64) (allPower SendAllPower, err error) { - allPower.AppGroupPower = GainAppGroupPower(oupk, org, poetId) + allPower.AppGroupPower, allPower.AppGroupMenu = GainAppGroupPower(oupk, org, poetId, role) //获取系统权限 var systemPower []modelssystempermission.AuthPowerList @@ -144,16 +145,16 @@ func GetMyPower(powerType string, oupk, org, poetId int64) (allPower SendAllPowe #org 行政组织 #poetId 岗位 */ -func GainAppGroupPower(oupk, org, poetId int64) []string { - var groupPower []string +func GainAppGroupPower(oupk, org, poetId int64, roleId string) (groupPower, groupAuth []string) { + //Step1: 判断有没有设定个人权限 - groupPower = GainGroupAppPower("person", oupk) + groupPower, groupAuth = GainGroupAppPower("person", oupk) if len(groupPower) > 0 { - return groupPower + return } //Step2: 获取职位权限 - postPowerArt := GainGroupAppPower("job", poetId) + postPowerArt, postGroupAuth := GainGroupAppPower("job", poetId) if len(postPowerArt) > 0 { for _, v := range postPowerArt { if !publicmethod.IsInTrue[string](v, groupPower) { @@ -161,7 +162,14 @@ func GainAppGroupPower(oupk, org, poetId int64) []string { } } } - //Step2: 行政组织 + if len(postGroupAuth) > 0 { + for _, v := range postGroupAuth { + if !publicmethod.IsInTrue[string](v, groupAuth) { + groupAuth = append(groupAuth, v) + } + } + } + //Step3: 行政组织 if org != 0 { var orgPowerList OrgAryPower orgPowerList.GetOrgPower(org) @@ -173,14 +181,59 @@ func GainAppGroupPower(oupk, org, poetId int64) []string { } } } + if len(orgPowerList.GroupPowerAry) > 0 { + for _, v := range orgPowerList.GroupPowerAry { + if !publicmethod.IsInTrue[string](v, groupAuth) { + groupAuth = append(groupAuth, v) + } + } + } } - return groupPower + //Step4: 获取角色权限 + if roleId != "" { + roleIdAry := strings.Split(roleId, ",") + // var roleIdAry []int64 + // err := json.Unmarshal([]byte(roleId), &roleIdAry) + // fmt.Printf("%v----%v----%v----%v\n\n", oupk, org, err, roleIdAry) + for _, v := range roleIdAry { + roId, _ := strconv.ParseInt(v, 10, 64) + rolePowerArt, roleGroupAuth := GainGroupAppPower("role", roId) + for _, rv := range rolePowerArt { + if !publicmethod.IsInTrue[string](rv, groupPower) { + groupPower = append(groupPower, rv) + } + } + for _, rv := range roleGroupAuth { + if !publicmethod.IsInTrue[string](rv, groupAuth) { + groupAuth = append(groupAuth, rv) + } + } + } + } + + // rolePowerArt, roleGroupAuth := GainGroupAppPower("role", oupk) + // if len(rolePowerArt) > 0 { + // for _, v := range rolePowerArt { + // if !publicmethod.IsInTrue[string](v, groupPower) { + // groupPower = append(groupPower, v) + // } + // } + // } + // if len(roleGroupAuth) > 0 { + // for _, v := range roleGroupAuth { + // if !publicmethod.IsInTrue[string](v, groupAuth) { + // groupAuth = append(groupAuth, v) + // } + // } + // } + fmt.Printf("%v----%v----%v----%v\n\n", oupk, org, poetId, roleId) + return } func (o *OrgAryPower) GetOrgPower(orgId int64) { if orgId != 0 { - orgPowerArt := GainGroupAppPower("org", orgId) + orgPowerArt, groupAuth := GainGroupAppPower("org", orgId) if len(orgPowerArt) > 0 { for _, v := range orgPowerArt { if !publicmethod.IsInTrue[string](v, o.PowerAry) { @@ -194,6 +247,20 @@ func (o *OrgAryPower) GetOrgPower(orgId int64) { o.GetOrgPower(orgInfo.Superior) } } + + if len(groupAuth) > 0 { + for _, v := range groupAuth { + if !publicmethod.IsInTrue[string](v, o.GroupPowerAry) { + o.GroupPowerAry = append(o.GroupPowerAry, v) + } + } + } else { + var orgInfo modelshr.AdministrativeOrganization + orgInfo.GetCont(map[string]interface{}{"`id`": orgId}, "`superior`") + if orgInfo.Superior != 0 { + o.GetOrgPower(orgInfo.Superior) + } + } } } @@ -203,13 +270,16 @@ func (o *OrgAryPower) GetOrgPower(orgId int64) { @ 时间: 2025-12-11 16:00:06 @ 功能: 获取分组授权 */ -func GainGroupAppPower(types string, id int64) (powerArt []string) { +func GainGroupAppPower(types string, id int64) (powerArt []string, groupAuth []string) { var myPower modelssystempermission.AuthGroupPower err := overall.CONSTANT_DB_System_Permission.Where("`appType` = 'app' AND `orgPowerType` = ? AND `orgOrUserKey` = ?", types, id).First(&myPower).Error if err == nil || myPower.Id != 0 { if myPower.PowerInfo != "" && myPower.PowerInfo != "null" { json.Unmarshal([]byte(myPower.PowerInfo), &powerArt) } + if myPower.GroupStatus != "" && myPower.GroupStatus != "null" { + json.Unmarshal([]byte(myPower.GroupStatus), &groupAuth) + } } return } @@ -322,7 +392,7 @@ func (x *XieChengPowerSys) GetAppFormPower(sysType, powerType string, key int64) } case "role": var roleId []int64 - overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.SystemRole{}).Select("`id`").Where("FIND_IN_SET(?, `superior`)", key).Find(&roleId) + overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.SystemRole{}).Select("`id`").Where("FIND_IN_SET(?, `roleuser`)", key).Find(&roleId) if len(roleId) > 0 { var appAuthPower []modelssystempermission.AuthPower overall.CONSTANT_DB_System_Permission.Where("`appType` = ? AND `orgPowerType` = ? AND `orgOrUserKey` IN ? AND `appKey` <> 0", sysType, powerType, roleId).Find(&appAuthPower) diff --git a/api/version1/user/type.go b/api/version1/user/type.go index 1ca8494..39a89dd 100644 --- a/api/version1/user/type.go +++ b/api/version1/user/type.go @@ -133,6 +133,7 @@ type SendAllPower struct { AppSystemPower []AppMyPower `json:"appSystemPower"` AppKeyAry []string `json:"appKeyAry"` AppGroupPower []string `json:"appGroupPower"` //自定义App分组权限 + AppGroupMenu []string `json:"appGroupMenu"` } type SystemInfoPower struct { @@ -195,5 +196,6 @@ type AppMyPowerTable struct { // 获取行政组织矩阵权限 type OrgAryPower struct { - PowerAry []string + PowerAry []string + GroupPowerAry []string } diff --git a/api/version1/user/userCont.go b/api/version1/user/userCont.go index 89c3052..00699fb 100644 --- a/api/version1/user/userCont.go +++ b/api/version1/user/userCont.go @@ -83,7 +83,7 @@ func (a *ApiMethod) GetUserCont(c *gin.Context) { sendData.Mobilephone = myContInfo.Mobilephone sendData.Currentresidence = myContInfo.Currentresidence - sendData.AllPowerConfig, _ = GetMyPower("person", myContInfo.Key, myContInfo.AdminOrg, myContInfo.Position) + sendData.AllPowerConfig, _ = GetMyPower("person", myContInfo.Role, myContInfo.Key, myContInfo.AdminOrg, myContInfo.Position) writeRedisData, _ := json.Marshal(sendData.AllPowerConfig) publicmethod.SetupPowerInfo(myContInfo.Key, string(writeRedisData)) diff --git a/apirouter/v1/grantsystempower/pc.go b/apirouter/v1/grantsystempower/pc.go index f55efed..39d7c19 100644 --- a/apirouter/v1/grantsystempower/pc.go +++ b/apirouter/v1/grantsystempower/pc.go @@ -21,5 +21,9 @@ func (a *ApiRouter) RouterGroupPc(router *gin.RouterGroup) { apiRouter.POST("setpAppTableForms", methodBinding.SetpAppTableForm) //提交APp单一表单权限 apiRouter.POST("gainAppTableListNew", methodBinding.GainAppTableListNew) //获取对应App下边的表单 apiRouter.POST("gainAppEmpowerPower", methodBinding.GainAppEmpowerPower) //获取对应App下边的菜单 + + apiRouter.POST("appInitAuthorization", methodBinding.AppInitAuthorization) //初始化应用授权选项 + + apiRouter.POST("tabsAuthorizationMode", methodBinding.TabsAuthorizationMode) //选项卡App授权模式 } } diff --git a/config/configDatabase/database_5.241.yaml b/config/configDatabase/database_5.241.yaml new file mode 100644 index 0000000..f2cfafa --- /dev/null +++ b/config/configDatabase/database_5.241.yaml @@ -0,0 +1,339 @@ +#数据库配置 + +#主数据库 +master: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'hengxingaoke_tes' #数据库名称 + username: 'hengxingaoke_tes' #数据库用户民 + password: 'JsTt6iTpkZ85wDnF' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#微信数据库 +wechat: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'wechatuser' #数据库名称 + username: 'wechatuser' #数据库用户民 + password: '8jrFG2AzpJPxs88m' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#HR数据库 +hrdatabase: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + name: 'hr_new' #数据库名称 + username: 'hr_new' #数据库用户民 + password: 'kPMP6NafMsdccxDX' #数据库密码 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#文档属性数据库 +fileBookDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'learnmessage' #数据库名称 + username: 'learnmessage' #数据库用户民 + password: 'JyppSdcLT27f7dpB' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#错题库 +errorSubjectDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'errorsubject' #数据库名称 + username: 'errorsubject' #数据库用户民 + password: 'abRcXzraCMFYC4Me' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#自我测验 +myTestDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'selftestdatabase' #数据库名称 + username: 'selftestdatabase' #数据库用户民 + password: 'mXDWEBJCd5acnCjD' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#图文信息数据库 +imageTextDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'readdocument' #数据库名称 + username: 'readdocument' #数据库用户民 + password: 'CY2yanCmAP8p8bxj' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#计分明细数据库 +scoringDetailsDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'leaguetabledata' #数据库名称 + username: 'leaguetabledata' #数据库用户民 + password: 'PxeX8Dnw88G4Jpnr' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#趣味问答 +questionsAnswersDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'ques_and_answers' #数据库名称 + username: 'ques_and_answers' #数据库用户民 + password: 'CT7XGBrAwdnXkTNX' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#风云榜统计数据库 +billboardDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'statisticsing' #数据库名称 + username: 'statisticsing' #数据库用户民 + password: '4iMZNtMT8fk8imEb' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#健康上报数据库 +healthReportDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'location' #数据库名称 + username: 'location' #数据库用户民 + password: 'XreBJrkYh7K3jfbm' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#绩效考核数据库 +kpiDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'perform' #数据库名称 + username: 'perform' #数据库用户民 + password: 'amtzSrN5WnMsS4hb' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#企业微信回调记录 +wechatCallBackLogDate: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'wechatlog' #数据库名称 + username: 'wechatlog' #数据库用户民 + password: 'j7Hs8Tb6SkZzy2ee' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#管理档案 +managearchives: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'manage_archives' #数据库名称 + username: 'manage_archives' #数据库用户民 + password: 'c3ExYFLzFiLka72W' #数据库密码 + max_idle_conns: 100 #最大空闲数量1 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志2 + +#系统权限配置数据库 +systemPermission: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'system_empower' #数据库名称 + username: 'system_empower' #数据库用户民 + password: 'NTYni4L2mfxk5zZZ' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +#应用平台数据库 +appPlatformDatabase: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'app_platform' #数据库名称 + username: 'app_platform' #数据库用户民 + password: 'GJ8m6tXrSDL2SfA2' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + + +#仓库系统 +storage: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + name: 'depository' #数据库名称 + username: 'depository' #数据库用户民 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + + #应用平台数据库 +servermaster: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'hengxingaoke_tes' #数据库名称 + username: 'hengxingaoke_tes' #数据库用户民 + password: 'JsTt6iTpkZ85wDnF' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + +tidbrmaster: + url_path: '120.224.6.6' #数据库地址 + port: 60400 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'hengxingaoke_tes' #数据库名称 + username: 'root' #数据库用户民 + password: '9z_Bu28r1*DZ3K6@+a' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#自定义数据库 +customerFormDatabase: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'customer_form' #数据库名称 + username: 'customer_form' #数据库用户民 + password: 'Mjh4msNtADGjiMaC' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + #流程执行记录 +flowLogDatabase: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'flow_log' #数据库名称 + username: 'flow_log' #数据库用户民 + password: 'pakXanN4r4pCeWXE' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#自定义表单修改数据历史记录库 +reviseFormData: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'reviseform' #数据库名称 + username: 'reviseform' #数据库用户民 + password: 'AhwtAWMnezmGjCPn' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#性格色彩 +charactercolor: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'charactercolor' #数据库名称 + username: 'charactercolor' #数据库用户民 + password: 'Zj8BeyFa3ftZHiNH' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 + #HR内网数据库 +hrdatabaseinside: + url_path: '120.224.6.6' #数据库地址 + port: 6666 #数据库端口 + name: 'hr_new' #数据库名称 + username: 'hr_new' #数据库用户民 + password: 'AnknKiXiXaxNrw78' #数据库密码 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 +#生产排班记录 +jobScheduling: + url_path: '127.0.0.1' #数据库地址 + port: 13366 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'jobscheduling' #数据库名称 + username: 'jobscheduling' #数据库用户民 + password: 'YKEyZsxZaEPT4kcK' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 100 #最大打开数量 + gorm_log: true #是否开启gorm日志 \ No newline at end of file diff --git a/go.mod b/go.mod index eefb965..7e43d8a 100644 --- a/go.mod +++ b/go.mod @@ -75,7 +75,7 @@ require ( golang.org/x/crypto v0.38.0 // indirect golang.org/x/net v0.40.0 // indirect golang.org/x/sys v0.33.0 // indirect - golang.org/x/text v0.25.0 // indirect + golang.org/x/text v0.25.0 google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/postgres v1.5.11 diff --git a/models/modelssystempermission/auth_group_power.go b/models/modelssystempermission/auth_group_power.go index e1532cb..68b167c 100644 --- a/models/modelssystempermission/auth_group_power.go +++ b/models/modelssystempermission/auth_group_power.go @@ -13,6 +13,7 @@ type AuthGroupPower struct { OrgOrUserKey int64 `gorm:"column:orgOrUserKey;type:bigint(20) unsigned;default:0;comment:行政组织或角色、人员识别符;NOT NULL" json:"orgOrUserKey"` Time int64 `gorm:"column:time;type:bigint(20) unsigned;default:0;comment:编辑时间;NOT NULL" json:"time"` PowerInfo string `gorm:"column:powerInfo;type:text;comment:权限结构体" json:"powerInfo"` + GroupStatus string `gorm:"column:groupStatus;type:text;comment:分组权限状态" json:"groupStatus"` } func (cont *AuthGroupPower) TableName() string { diff --git a/overall/publicmethod/technique.go b/overall/publicmethod/technique.go index 9e9f13b..e470585 100644 --- a/overall/publicmethod/technique.go +++ b/overall/publicmethod/technique.go @@ -1009,6 +1009,9 @@ func readMenuList(postid int64, system string) (menuIdAry, menuUrl []string, err if err != nil { return } + if ponitId == "" { + return + } menuIdAry = strings.Split(ponitId, ",") if len(menuIdAry) < 1 { return