应用集成平台服务端
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.
 
 
 

385 lines
12 KiB

package setupRoule
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelssystempermission"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"sort"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
// 获取平台授权项目
func (a *ApiMethod) AppPowerUnit(c *gin.Context) {
var requestData GetPowerUnitParameter
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.PowerType == "" {
requestData.PowerType = "org"
}
if requestData.AppSystem == "" {
requestData.AppSystem = "system"
}
if requestData.RoleId == "" {
requestData.RoleId = "0"
}
powerInfo, _ := publicmethod.GetSystemPower(requestData.PowerType, requestData.AppSystem, requestData.RoleId, requestData.AppId)
// jsonVal, _ := json.Marshal(powerInfo)
// fmt.Printf("powerInfo-------------->%v\n\n", string(jsonVal))
var appPowerTrue []AppPowerTree
switch requestData.AppSystem {
default:
appPowerTrue = AppMenuPower(requestData.PowerType, requestData.RoleId, powerInfo)
}
publicmethod.Result(0, appPowerTrue, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2025-11-10 10:02:54
@ 功能: 数通智联平台菜单
*/
func AppMenuPower(powerType, unitId string, powerInfo publicmethod.SendSystemPower) []AppPowerTree {
var menuList []AppPowerInfo
overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Menus{}).Where("`visible` = 1 OR `visible` = 2").Find(&menuList)
sort.Slice(menuList, func(i, j int) bool {
return menuList[i].Sort < menuList[j].Sort
})
var noButMenu []AppPowerInfo
var ButMenu []AppPowerInfo
for _, v := range menuList {
if v.Types != 4 {
noButMenu = append(noButMenu, v)
} else {
ButMenu = append(ButMenu, v)
}
}
// noButMenujsh, _ := json.Marshal(noButMenu)
// ButMenujsh, _ := json.Marshal(ButMenu)
// fmt.Printf("数通智联平台菜单---->%v\n\n\n\n%v\n\n\n\n", string(noButMenujsh), string(ButMenujsh))
ButMenues := ButIsPick(ButMenu, powerInfo)
// ButMenujshsss, _ := json.Marshal(ButMenues)
// fmt.Printf("数通智联平台菜单--ButMenujshsss-->%v\n\n\n\n%v\n\n\n\n", string(ButMenujshsss), string(ButMenujsh))
menhjs := MenuButList(noButMenu, ButMenues)
// Bumenhjs, _ := json.Marshal(menhjs)
// fmt.Printf("数通智联平台菜单--Bumenhjs-->%v\n\n\n\n%v\n\n\n\n", string(ButMenujshsss), string(Bumenhjs))
butList := MenuPower(menhjs, powerInfo)
return AppMenuTrue(0, butList)
}
/*
*
@ 作者: 秦东
@ 时间: 2026-01-14 09:41:58
@ 功能: 判断按钮是否选中
*/
func ButIsPick(ButMenu []AppPowerInfo, powerInfo publicmethod.SendSystemPower) []AppPowerInfo {
var butIsTrue []string
for _, v := range powerInfo.PowerList {
if len(v.ButPower) > 0 {
for _, bv := range v.ButPower {
if !publicmethod.IsInTrue[string](bv, butIsTrue) {
butIsTrue = append(butIsTrue, bv)
}
}
}
}
if len(butIsTrue) > 0 {
for i, v := range ButMenu {
if publicmethod.IsInTrue[string](v.Perm, butIsTrue) {
ButMenu[i].IsTrue = true
}
}
}
return ButMenu
}
/*
*
@ 作者: 秦东
@ 时间: 2025-11-21 14:20:46
@ 功能: 判断按钮
*/
func JuadgeBut(menuInfo []AppPowerInfo, powerInfo publicmethod.ItemInfo) (butPower []AppPowerInfo) {
for _, v := range menuInfo {
idStr := strconv.Itoa(v.Id)
if publicmethod.IsInTrue[string](idStr, powerInfo.ButPower) {
v.IsTrue = true
} else {
v.IsTrue = false
}
butPower = append(butPower, v)
}
return
}
// 组合菜单按钮
func MenuButList(noButMenu, ButMenu []AppPowerInfo) (menuButList []AppMenuBut) {
// var but []int64
for _, v := range noButMenu {
// fmt.Printf("v.Perm --> %v-->\n\n\n\n", v.Perm)
var menuButInfo AppMenuBut
menuButInfo.Id = v.Id
menuButInfo.Name = v.Name //菜单名称
menuButInfo.Types = v.Types //菜单类型(1-菜单;2-目录;3-外链;4-按钮权限)
menuButInfo.Perm = v.Perm //权限标识
menuButInfo.Sort = v.Sort //排序(数字越小排名越靠前)
menuButInfo.ParentId = v.ParentId //父菜单ID
menuButInfo.IsTrue = v.IsTrue
menuButInfo.AppPowerList = []int64{1}
menuButInfo.Visible = 1
menuButInfo.VisibleRange.Types = 1
for _, bv := range ButMenu {
if bv.ParentId == v.Id {
// var butInfo AppPowerInfo
// butInfo.Id = v.Id //int
// butInfo.Name = v.Name //string
// butInfo.Types = v.Types //int
// butInfo.Perm = v.Perm //string
// butInfo.Sort = v.Sort //int
// butInfo.ParentId = v.ParentId //int
// butInfo.IsTrue = v.IsTrue //bool
menuButInfo.ButtenPower = append(menuButInfo.ButtenPower, bv)
}
}
menuButList = append(menuButList, menuButInfo)
}
return
}
func AppMenuTrue(parentId int, list []AppMenuBut) []AppPowerTree {
treeList := []AppPowerTree{}
for _, v := range list {
if v.ParentId == parentId {
var treeInfo AppPowerTree
treeInfo.Id = v.Id //
treeInfo.Name = v.Name //菜单名称
treeInfo.Types = v.Types //菜单类型(1-菜单;2-目录;3-外链;4-按钮权限)
treeInfo.Perm = v.Perm //权限标识
treeInfo.Sort = v.Sort //排序(数字越小排名越靠前)
treeInfo.ParentId = v.ParentId //父菜单ID
treeInfo.IsTrue = v.IsTrue //
treeInfo.Visible = v.Visible
treeInfo.ButtenPower = v.ButtenPower
treeInfo.VisibleRange.Types = v.VisibleRange.Types
treeInfo.VisibleRange.Val = v.VisibleRange.Val
if v.Types != 4 {
treeInfo.Children = AppMenuTrue(v.Id, list)
}
treeList = append(treeList, treeInfo)
}
}
return treeList
}
/*
*
@ 作者: 秦东
@ 时间: 2025-11-21 14:12:32
@ 功能: 菜单判断是否选中
*/
func MenuPower(menuInfo []AppMenuBut, powerInfo publicmethod.SendSystemPower) (menuPower []AppMenuBut) {
for _, v := range menuInfo {
for _, pv := range powerInfo.PowerList {
if pv.ItemId == int64(v.Id) {
v.IsTrue = pv.IsPick
v.Visible = 1
if pv.VisibleRange > 1 {
v.Visible = pv.VisibleRange
}
v.VisibleRange.Types = 1
if pv.VisibleRange > 1 {
v.VisibleRange.Types = pv.VisibleRange
}
if len(pv.VisibleOrg) > 0 {
// var visStr []string
// for _, visv := range pv.VisibleOrg {
// visStr = append(visStr, strconv.FormatInt(visv, 10))
// }
v.VisibleRange.Val = pv.VisibleOrg
}
// v.ButtenPower = JuadgeBut(v.ButtenPower, pv)
}
}
menuPower = append(menuPower, v)
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2026-01-15 16:12:02
@ 功能: 复制角色
*/
func (a *ApiMethod) CopyRolePower(c *gin.Context) {
var requestData CopyRolePowerInfo
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Label == "" {
publicmethod.Result(1, requestData, c, "角色为命名!")
return
}
if requestData.Id == "" {
publicmethod.Result(1, requestData, c, "未知角色源头!")
return
}
var roleInfo modelssystempermission.SystemRole
err = roleInfo.GetCont(map[string]interface{}{"`id`": requestData.Id})
if err != nil {
publicmethod.Result(100, err, c)
return
}
if roleInfo.Name == requestData.Label {
publicmethod.Result(1, requestData, c, "该名称已经存在!不可重复使用!")
return
}
var newRoleInfo modelssystempermission.SystemRole
newRoleInfo.Name = requestData.Label //系统名称"`
newRoleInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"`
newRoleInfo.Time = time.Now().Unix() //创建时间"`
newRoleInfo.Sort = roleInfo.Sort //排序"`
newRoleInfo.Types = roleInfo.Types //类型"`
newRoleInfo.Superior = roleInfo.Superior //上级"`
newRoleInfo.Roleuser = roleInfo.Roleuser //nt:使用人员"`
err = overall.CONSTANT_DB_System_Permission.Create(&newRoleInfo).Error
if err != nil {
publicmethod.Result(100, err, c)
return
}
if roleInfo.Id != 0 {
CopyGroupPower(roleInfo.Id, newRoleInfo)
CopyRolePowerAry(roleInfo.Id, newRoleInfo)
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东return
@ 时间: 2026-01-16 11:06:28
@ 功能: 复制角色权限
*/
func CopyRolePowerAry(oldRoleId int64, newRoleInfoEntry modelssystempermission.SystemRole) (err error) {
var authPowerList []modelssystempermission.AuthPower
err = overall.CONSTANT_DB_System_Permission.Where("`orgPowerType` = ? AND `orgOrUserKey` = ?", "role", oldRoleId).Find(&authPowerList).Error
if err != nil {
return
}
var saveNewRole []modelssystempermission.AuthPower
var oldUuid []int64
var uuid int64
for _, v := range authPowerList {
// uuid := publicmethod.GetUUid(int64(i))
for {
uuid = publicmethod.GetUUid(1)
if !publicmethod.IsInTrue[int64](uuid, oldUuid) {
oldUuid = append(oldUuid, uuid)
break
}
}
var newRoleInfo modelssystempermission.AuthPower
newRoleInfo.Id = uuid //
newRoleInfo.OrgPowerType = v.OrgPowerType //赋权类型(org:组织;job:岗位;role:角色;person:个人)\`
newRoleInfo.OrgOrUserKey = newRoleInfoEntry.Id //行政组织或角色、人员识别符`
newRoleInfo.AppType = v.AppType //系统类型(system:系统平台;app:自定义表单与应用)" `
newRoleInfo.AppKey = v.AppKey //自定义应用App" `
newRoleInfo.Time = time.Now().Unix() //d;default:0;comment:编辑时间;NOT NULL" json:"time"`
newRoleInfo.IsTrue = v.IsTrue //default:0;comment:是否有权(1:有;非1:无);NOT NULL" json:"isTrue"`
newRoleInfo.PowerInfo = v.PowerInfo //权限结构体" json:"powerInfo"`
newRoleInfo.AppButPower = v.AppButPower //t:自定义应用按钮授权" json:"appButPower"`
saveNewRole = append(saveNewRole, newRoleInfo)
CopyRoleItemPower(v.Id, uuid)
}
if len(saveNewRole) > 0 {
err = overall.CONSTANT_DB_System_Permission.Create(&saveNewRole).Error
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2026-01-16 11:25:07
@ 功能: 复制具体栏目角色权限
*/
func CopyRoleItemPower(oldAuthId, newAuthId int64) (err error) {
var oldPowerItemAry []modelssystempermission.PowerInfo
err = overall.CONSTANT_DB_System_Permission.Where("`authId` = ? ", oldAuthId).Find(&oldPowerItemAry).Error
if err != nil {
return
}
if len(oldPowerItemAry) > 0 {
var newSaveData []modelssystempermission.PowerInfo
for _, v := range oldPowerItemAry {
var saveCont modelssystempermission.PowerInfo
saveCont.AuthId = newAuthId //归属权限;`
saveCont.ItemId = v.ItemId //项目`
saveCont.IsPick = v.IsPick //是否有权(1:有;非1:无)`
saveCont.TablePower = v.TablePower //表单权限"
saveCont.ListPower = v.ListPower //列表权限"`
saveCont.VisibleRange = v.VisibleRange //可见范围(1:本人;2:本岗位;3:本部门;4:本分部;5:指定行政组织;6:所有)`
saveCont.VisibleOrg = v.VisibleOrg //可见范围辅助参数"
saveCont.ButPower = v.ButPower //按钮权限"
saveCont.Time = time.Now().Unix() //编辑时间
saveCont.PageButPower = v.PageButPower //页面表单权限"
newSaveData = append(newSaveData, saveCont)
}
if len(newSaveData) > 0 {
err = overall.CONSTANT_DB_System_Permission.Create(&newSaveData).Error
}
}
return
}
// 复制角色分组权限
func CopyGroupPower(oldRoleId int64, newRoleInfo modelssystempermission.SystemRole) (err error) {
var oldRoleGroupAry []modelssystempermission.AuthGroupPower
err = overall.CONSTANT_DB_System_Permission.Where("`orgPowerType` = ? AND `orgOrUserKey` = ?", "role", oldRoleId).Find(&oldRoleGroupAry).Error
if err != nil {
return
}
var oldUuid []int64
var uuid int64
var saveNewRoleGroup []modelssystempermission.AuthGroupPower
for _, v := range oldRoleGroupAry {
for {
uuid = publicmethod.GetUUid(1)
if !publicmethod.IsInTrue[int64](uuid, oldUuid) {
oldUuid = append(oldUuid, uuid)
break
}
}
var newCont modelssystempermission.AuthGroupPower
newCont.Id = uuid //
newCont.AppType = v.AppType //系统类型(system:系统平台;app:自定义表单与应用)"
newCont.OrgPowerType = v.OrgPowerType //赋权类型(org:组织;job:岗位;role:角色;person:个人)"
newCont.OrgOrUserKey = newRoleInfo.Id //行政组织或角色、人员识别符
newCont.Time = time.Now().Unix() //编辑时间
newCont.PowerInfo = v.PowerInfo //权限结构体"
newCont.GroupStatus = v.GroupStatus //分组权限状态"
saveNewRoleGroup = append(saveNewRoleGroup, newCont)
}
if len(saveNewRoleGroup) > 0 {
err = overall.CONSTANT_DB_System_Permission.Create(&saveNewRoleGroup).Error
}
return
}