应用集成平台服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

437 lines
16 KiB

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
}