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
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
|
|
}
|
|
|