package publicmethod import ( "appPlatform/models/modelAppPlatform" "appPlatform/models/modelssystempermission" "appPlatform/overall" "encoding/json" "fmt" "strconv" ) /* * @ 作者: 秦东 @ 时间: 2026-03-21 08:37:17 @ 功能: 解析个人拥有的权限 */ func MyHavePermission(userKey, orgId, postId int64, roleoId []int64, roleStr string) (allPower SendAllPowers, err error) { allPower.AppGroupMenu, allPower.AppGroupPower = MyAppGroupPoswer(userKey, orgId, postId, roleoId) //获取个人的系统权限设置 var mySystemPower []modelssystempermission.AuthPowerList err = overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.AuthPowerList{}).Where("`appType` = 'system' AND `orgPowerType` = 'person' AND `orgOrUserKey` = ? ", userKey).Find(&mySystemPower).Error fmt.Printf("\n\n-------1-----mySystemPower------1----->%v\n\n", len(mySystemPower)) if len(mySystemPower) > 0 { //存在个人设置的单一权限 for _, v := range mySystemPower { // if v.AppType == "app" { //低代码自定义表单权限 // } else { //低代码系统权限 var sysPower SystemInfoPower sysPower.AppId = strconv.FormatInt(v.ItemId, 10) sysPower.IsPick = false if v.IsPick == 1 { sysPower.IsPick = true //处理已选中的菜单 if !IsInTrue[int64](v.ItemId, allPower.MenuIdAry) { allPower.MenuIdAry = append(allPower.MenuIdAry, v.ItemId) } //处理菜单按钮权限 if v.ButPower != "" && v.ButPower != "null" { var butIdStrAry []string json.Unmarshal([]byte(v.ButPower), &butIdStrAry) if len(butIdStrAry) > 0 { for _, bv := range butIdStrAry { if !IsInTrue[string](bv, sysPower.ButIdAry) { sysPower.ButIdAry = append(sysPower.ButIdAry, bv) } if !IsInTrue[string](bv, allPower.MenuButIdAry) { allPower.MenuButIdAry = append(allPower.MenuButIdAry, bv) } } } } sysPower.Scope = v.VisibleRange if v.VisibleRange == 5 && v.ButPower != "" && v.ButPower != "null" { //自定义可见范围 var scopeManAry []int json.Unmarshal([]byte(v.VisibleOrg), &scopeManAry) //解析可见分为 if len(scopeManAry) > 0 { for _, bv := range scopeManAry { if !IsInTrue[int](bv, sysPower.ScopeManAry) { sysPower.ScopeManAry = append(sysPower.ScopeManAry, bv) } } } } } allPower.SystemPower = append(allPower.SystemPower, sysPower) // } } } else { //不存在个人单独设置的权限 var mySysMenuPower XieChengPowerSys syncSetingSystem.Add(1) go mySysMenuPower.HaveSystemMeunPower("system", "org", orgId) syncSetingSystem.Add(1) go mySysMenuPower.HaveSystemMeunPower("system", "job", postId) for _, rv := range roleoId { syncSetingSystem.Add(1) go mySysMenuPower.HaveSystemMeunPower("system", "role", rv) } syncSetingSystem.Wait() fmt.Printf("\n\n-------1-----mySystemPower------2----->%v\n\n", len(mySysMenuPower.SysTemList)) mySysMenuPower.GetPowerSystem(mySysMenuPower.SysTemList) allPower.MenuIdAry = mySysMenuPower.MenuId var butAryStr []string for _, v := range allPower.SystemPower { for _, bv := range v.ButIdAry { butAryStr = append(butAryStr, bv) } } allPower.MenuButIdAry = append(allPower.MenuButIdAry, butAryStr...) var menuList []modelAppPlatform.Menus if len(mySysMenuPower.MenuId) > 0 { overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Menus{}).Select("`id`,`name`").Where("`id` IN ?", mySysMenuPower.MenuId).Find(&menuList) } for _, v := range menuList { for si, sv := range mySysMenuPower.SystemPower { if strconv.Itoa(v.Id) == sv.AppId { mySysMenuPower.SystemPower[si].Name = v.Name } } } allPower.SystemPower = mySysMenuPower.SystemPower } //获取低代码平台自定义表单权限 var myAppSystemPower []modelssystempermission.AuthPowerList err = overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.AuthPowerList{}).Where("`appType` = 'app' AND `orgPowerType` = 'person' AND `orgOrUserKey` = ? ", userKey).Find(&myAppSystemPower).Error fmt.Printf("\n\n-------2-----myAppSystemPower------1----->%v\n\n", len(myAppSystemPower)) if len(myAppSystemPower) > 0 { //存在个人设置的单一权限 for _, v := range myAppSystemPower { var myAppInfo AppMyPower myAppInfo.AppId = strconv.FormatInt(v.AppKey, 10) if v.IsTrue == 1 { allPower.AppKeyAry = append(allPower.AppKeyAry, strconv.FormatInt(v.AppKey, 10)) myAppInfo.IsPick = true } else { myAppInfo.IsPick = false } if v.AppButPower != "" && v.AppButPower != "null" { json.Unmarshal([]byte(v.AppButPower), &myAppInfo.ButPower) } myAppInfo.FormTrue, myAppInfo.FormPower = GetTablePower(v.Id) allPower.AppSystemPower = append(allPower.AppSystemPower, myAppInfo) } } else { //不存在个人单独设置的权限 var myAppPower XieChengPowerSys syncSeting.Add(1) go myAppPower.GetAppFormPower("app", "org", orgId) syncSeting.Add(1) go myAppPower.GetAppFormPower("app", "job", postId) syncSeting.Add(1) go myAppPower.GetAppFormPower("app", "role", userKey) syncSeting.Wait() var tableId []string for _, v := range myAppPower.AppUUID { if !IsInTrue[string](v, tableId) { tableId = append(tableId, v) } } allPower.AppKeyAry = tableId allPower.AppSystemPower = MergePower(myAppPower.FormTable) } return } /* * @ 作者: 秦东 @ 时间: 2026-03-21 14:02:08 @ 功能: 按系统授权分类获取权限数据 */ func (x *XieChengPowerSys) HaveSystemMeunPower(sysType, powerType string, key int64) { defer syncSetingSystem.Done() var orgPowList []modelssystempermission.AuthPowerList overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.AuthPowerList{}).Where("`appType` = ? AND `orgPowerType` = ? AND `orgOrUserKey` = ? AND `appKey` = 0", sysType, powerType, key).Find(&orgPowList) fmt.Printf("\n\n-------1-----按系统授权分类获取权限数据------1----->%v\n\n", len(orgPowList)) if len(orgPowList) > 0 { for _, v := range orgPowList { isTrue := true for si, sv := range x.SysTemList { if v.Id == sv.Id { isTrue = false if v.IsPick == 1 { x.SysTemList[si].IsPick = v.IsPick if v.TablePower != "" && v.TablePower != "null" { var tableAry []string json.Unmarshal([]byte(v.TablePower), &tableAry) if len(tableAry) > 0 { var tablePower []string json.Unmarshal([]byte(sv.TablePower), &tablePower) tabAllAry := MergeStruct[string](tableAry, tablePower) tabAllAryStr, _ := json.Marshal(tabAllAry) x.SysTemList[si].TablePower = string(tabAllAryStr) } } if v.ListPower != "" && v.ListPower != "null" { var listPowerAry []string json.Unmarshal([]byte(v.ListPower), &listPowerAry) if len(listPowerAry) > 0 { var oldListPower []string json.Unmarshal([]byte(sv.ListPower), &oldListPower) listAllAry := MergeStruct[string](listPowerAry, oldListPower) listAllAryStr, _ := json.Marshal(listAllAry) x.SysTemList[si].ListPower = string(listAllAryStr) } } maxRange := sv.VisibleRange if v.VisibleRange > sv.VisibleRange { x.SysTemList[si].VisibleRange = v.VisibleRange x.SysTemList[si].PowerInfo = v.PowerInfo maxRange = v.VisibleRange if maxRange == 5 { if v.VisibleOrg != "" && v.VisibleOrg != "null" { var btPwAry []int json.Unmarshal([]byte(v.VisibleOrg), &btPwAry) if len(btPwAry) > 0 { var oldBTPAry []int json.Unmarshal([]byte(sv.VisibleOrg), &oldBTPAry) btpwAll := MergeStruct[int](btPwAry, oldBTPAry) btpwAllAryStr, _ := json.Marshal(btpwAll) x.SysTemList[si].VisibleOrg = string(btpwAllAryStr) } } } } if v.ButPower != "" && v.ButPower != "null" { var butertPowerAry []string json.Unmarshal([]byte(v.ButPower), &butertPowerAry) if len(butertPowerAry) > 0 { var oldButPower []string json.Unmarshal([]byte(sv.ButPower), &oldButPower) butWerAllAry := MergeStruct[string](butertPowerAry, oldButPower) butWerAllAryStr, _ := json.Marshal(butWerAllAry) x.SysTemList[si].ButPower = string(butWerAllAryStr) } } if v.PageButPower != "" && v.PageButPower != "null" { var pageButPowerAry []string json.Unmarshal([]byte(v.PageButPower), &pageButPowerAry) if len(pageButPowerAry) > 0 { var oldPageButPower []string json.Unmarshal([]byte(sv.PageButPower), &oldPageButPower) pageButAllAry := MergeStruct[string](pageButPowerAry, oldPageButPower) pageButAllAryStr, _ := json.Marshal(pageButAllAry) x.SysTemList[si].PageButPower = string(pageButAllAryStr) } } if v.AppButPower != "" && v.AppButPower != "null" { var appButPowerAry []string json.Unmarshal([]byte(v.AppButPower), &appButPowerAry) if len(appButPowerAry) > 0 { var oldAppButPoweres []string json.Unmarshal([]byte(sv.AppButPower), &oldAppButPoweres) appButAllAry := MergeStruct[string](appButPowerAry, oldAppButPoweres) appButAllAryStr, _ := json.Marshal(appButAllAry) x.SysTemList[si].AppButPower = string(appButAllAryStr) } } } } } if isTrue { x.SysTemList = append(x.SysTemList, v) } } } else { if powerType == "org" { var allFirstOrgId GetOrgAllParent allFirstOrgId.GetOrgFirst(key) fmt.Printf("\n\n-------1-----按系统授权分类获取权限数据------2----->%v\n\n", len(allFirstOrgId.Id)) if len(allFirstOrgId.Id) > 0 { for _, v := range allFirstOrgId.Id { if v != 0 { var orgFirstPowList []modelssystempermission.AuthPowerList overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.AuthPowerList{}).Where("`appType` = ? AND `orgPowerType` = ? AND `orgOrUserKey` = ? AND `appKey` = 0", sysType, powerType, v).Find(&orgFirstPowList) fmt.Printf("\n\n-------1-----按系统授权分类获取权限数据------3----->%v--->%v\n\n", v, len(orgFirstPowList)) if len(orgFirstPowList) > 0 { for _, v := range orgFirstPowList { isTrue := true for si, sv := range x.SysTemList { if v.Id == sv.Id { isTrue = false if v.IsPick == 1 { x.SysTemList[si].IsPick = v.IsPick if v.TablePower != "" && v.TablePower != "null" { var tableAry []string json.Unmarshal([]byte(v.TablePower), &tableAry) if len(tableAry) > 0 { var tablePower []string json.Unmarshal([]byte(sv.TablePower), &tablePower) tabAllAry := MergeStruct[string](tableAry, tablePower) tabAllAryStr, _ := json.Marshal(tabAllAry) x.SysTemList[si].TablePower = string(tabAllAryStr) } } if v.ListPower != "" && v.ListPower != "null" { var listPowerAry []string json.Unmarshal([]byte(v.ListPower), &listPowerAry) if len(listPowerAry) > 0 { var oldListPower []string json.Unmarshal([]byte(sv.ListPower), &oldListPower) listAllAry := MergeStruct[string](listPowerAry, oldListPower) listAllAryStr, _ := json.Marshal(listAllAry) x.SysTemList[si].ListPower = string(listAllAryStr) } } maxRange := sv.VisibleRange if v.VisibleRange > sv.VisibleRange { x.SysTemList[si].VisibleRange = v.VisibleRange x.SysTemList[si].PowerInfo = v.PowerInfo maxRange = v.VisibleRange if maxRange == 5 { if v.VisibleOrg != "" && v.VisibleOrg != "null" { var btPwAry []int json.Unmarshal([]byte(v.VisibleOrg), &btPwAry) if len(btPwAry) > 0 { var oldBTPAry []int json.Unmarshal([]byte(sv.VisibleOrg), &oldBTPAry) btpwAll := MergeStruct[int](btPwAry, oldBTPAry) btpwAllAryStr, _ := json.Marshal(btpwAll) x.SysTemList[si].VisibleOrg = string(btpwAllAryStr) } } } } if v.ButPower != "" && v.ButPower != "null" { var butertPowerAry []string json.Unmarshal([]byte(v.ButPower), &butertPowerAry) if len(butertPowerAry) > 0 { var oldButPower []string json.Unmarshal([]byte(sv.ButPower), &oldButPower) butWerAllAry := MergeStruct[string](butertPowerAry, oldButPower) butWerAllAryStr, _ := json.Marshal(butWerAllAry) x.SysTemList[si].ButPower = string(butWerAllAryStr) } } if v.PageButPower != "" && v.PageButPower != "null" { var pageButPowerAry []string json.Unmarshal([]byte(v.PageButPower), &pageButPowerAry) if len(pageButPowerAry) > 0 { var oldPageButPower []string json.Unmarshal([]byte(sv.PageButPower), &oldPageButPower) pageButAllAry := MergeStruct[string](pageButPowerAry, oldPageButPower) pageButAllAryStr, _ := json.Marshal(pageButAllAry) x.SysTemList[si].PageButPower = string(pageButAllAryStr) } } if v.AppButPower != "" && v.AppButPower != "null" { var appButPowerAry []string json.Unmarshal([]byte(v.AppButPower), &appButPowerAry) if len(appButPowerAry) > 0 { var oldAppButPoweres []string json.Unmarshal([]byte(sv.AppButPower), &oldAppButPoweres) appButAllAry := MergeStruct[string](appButPowerAry, oldAppButPoweres) appButAllAryStr, _ := json.Marshal(appButAllAry) x.SysTemList[si].AppButPower = string(appButAllAryStr) } } } } } if isTrue { x.SysTemList = append(x.SysTemList, v) } } break } } } } } } } /* * @ 作者: 秦东 @ 时间: 2026-03-21 08:56:38 @ 功能: 获取自定义App分组权限 */ func MyAppGroupPoswer(userKey, orgId, postId int64, roleoId []int64) (groupPower, groupAuth []string) { //Step1: 获取个人权限 groupAuth, groupPower = GainGroupAppPower("person", userKey) if len(groupPower) > 0 { return } //Step2: 获取职位权限 postPowerArt, postGroupAuth := GainGroupAppPower("job", postId) if len(postGroupAuth) > 0 { for _, v := range postGroupAuth { if !IsInTrue[string](v, groupPower) { groupPower = append(groupPower, v) } } if len(postPowerArt) > 0 { for _, v := range postPowerArt { if !IsInTrue[string](v, groupAuth) { groupAuth = append(groupAuth, v) } } } } //Step3: 行政组织 var orgPowerList OrgAryPower orgPowerList.GetOrgPower(orgId) if len(orgPowerList.GroupPowerAry) > 0 { for _, v := range orgPowerList.GroupPowerAry { if !IsInTrue[string](v, groupPower) { groupPower = append(groupPower, v) } } if len(orgPowerList.PowerAry) > 0 { for _, v := range orgPowerList.PowerAry { if !IsInTrue[string](v, groupAuth) { groupAuth = append(groupAuth, v) } } } } //Step4: 获取角色权限 if len(roleoId) > 0 { for _, rv := range roleoId { rolePowerArt, roleGroupAuth := GainGroupAppPower("role", rv) if len(roleGroupAuth) > 0 { for _, v := range roleGroupAuth { if !IsInTrue[string](v, groupPower) { groupPower = append(groupPower, v) } } if len(rolePowerArt) > 0 { for _, v := range rolePowerArt { if !IsInTrue[string](v, groupAuth) { groupAuth = append(groupAuth, v) } } } } } } return }