From dbe96506c41804a4a67121465e1b5f439811c296 Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Fri, 12 Dec 2025 16:25:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E6=9D=83=E9=99=90=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/version1/customerApp/appControll.go | 107 ++++++++++++++---- api/version1/customerform/form.go | 4 +- api/version1/customerform/formTable.go | 4 +- api/version1/customerform/formTableList.go | 6 +- api/version1/dataCenter/runDataBase.go | 6 + api/version1/grantpowers/myAppPower.go | 103 +++++++++++++++++ api/version1/grantpowers/postpower.go | 46 +++++++- api/version1/grantpowers/type.go | 33 ++++-- api/version1/setupRoule/power.go | 2 +- .../taskplatform/taskflowing/editformflow.go | 8 +- .../taskmanagement/formcontrol.go | 23 ++-- .../taskmanagement/importFormFile.go | 2 + api/version1/user/setPower.go | 104 +++++++++++++++++ api/version1/user/type.go | 10 +- apirouter/v1/grantsystempower/pc.go | 1 + models/customerForm/taskrecord.go | 1 + .../modelssystempermission/authpowerlist.go | 2 + overall/publicmethod/getUserPower.go | 79 +++++++++++-- overall/publicmethod/powerRedis.go | 24 ++++ overall/publicmethod/type.go | 2 + 20 files changed, 496 insertions(+), 71 deletions(-) create mode 100644 api/version1/grantpowers/myAppPower.go diff --git a/api/version1/customerApp/appControll.go b/api/version1/customerApp/appControll.go index b97fda2..d408657 100644 --- a/api/version1/customerApp/appControll.go +++ b/api/version1/customerApp/appControll.go @@ -310,15 +310,18 @@ func (a *ApiMethod) GainAppEditPsge(c *gin.Context) { sendInfo["describe"] = appCont.Describe sendInfo["MyContJwtPower"], sendInfo["MyContJwtPowerErr"] = c.Get(overall.MyContJwtPower) sendInfo["myPower"] = myPower - if appCont.ListJson != "" { - var menuTerr []AppMenuTree - json.Unmarshal([]byte(appCont.ListJson), &menuTerr) - sendInfo["menuTree"] = menuTerr - } else { - syncSeting.Add(1) - sendInfo["menuTree"] = GainAppMenuTree(appCont.SignCode) - syncSeting.Wait() - } + // if appCont.ListJson != "" { + // var menuTerr []AppMenuTree + // json.Unmarshal([]byte(appCont.ListJson), &menuTerr) + // sendInfo["menuTree"] = menuTerr + // } else { + // syncSeting.Add(1) + // sendInfo["menuTree"] = GainAppMenuTree(appCont.SignCode) + // syncSeting.Wait() + // } + syncSeting.Add(1) + sendInfo["menuTree"] = GainAppMenuTree(appCont.SignCode, myPower) + syncSeting.Wait() publicmethod.Result(0, sendInfo, c) } @@ -339,7 +342,7 @@ func (a *ApiMethod) GainAppEditPsge(c *gin.Context) { # */ -func GainAppMenuTree(key int64) (menusTree []AppMenuTree) { +func GainAppMenuTree(key int64, menuPower publicmethod.SendAppTabelPower) (menusTree []AppMenuTree) { defer syncSeting.Done() if key == 0 { return @@ -356,6 +359,19 @@ func GainAppMenuTree(key int64) (menusTree []AppMenuTree) { sort.Slice(menuList, func(i, j int) bool { return menuList[i].Sort < menuList[j].Sort }) + + var treeList []modelAppPlatform.Appmenus + for _, v := range menuList { + if v.IsLock == 1 { + treeList = append(treeList, v) + } else { + muiStr := strconv.FormatInt(v.Id, 10) + if publicmethod.IsInTrue[string](muiStr, menuPower.FormTrue) { + treeList = append(treeList, v) + } + } + } + menusTree = AppTreeMenus(key, menuList) return } @@ -511,9 +527,12 @@ func (a *ApiMethod) SaveAppMenu(c *gin.Context) { publicmethod.Result(104, err, c) return } + menuUUidStr := strconv.FormatInt(menuUUid, 10) + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, menuUUidStr) + var newAppMenu []AppMenuTree syncSeting.Add(1) - newAppMenu = GainAppMenuTree(appKeyId) + newAppMenu = GainAppMenuTree(appKeyId, myPower) syncSeting.Wait() saveData := publicmethod.MapOut[string]() menuTreeJson, _ := json.Marshal(newAppMenu) @@ -563,8 +582,13 @@ func (a *ApiMethod) GainAllAppMenu(c *gin.Context) { if appCont.ListJson != "" { json.Unmarshal([]byte(appCont.ListJson), &menuTreeMap) } else { + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, requestData.Id) syncSeting.Add(1) - menuTreeMap = GainAppMenuTree(appCont.SignCode) + menuTreeMap = GainAppMenuTree(appCont.SignCode, myPower) syncSeting.Wait() } @@ -686,9 +710,16 @@ func (a *ApiMethod) EditAppMenuLable(c *gin.Context) { EditAppMenuFormName(oldMenuInfo.Id, requestData.Label) } } + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + appSig := strconv.FormatInt(oldMenuInfo.Appkey, 10) + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, appSig) + syncSeting.Add(1) + var newAppMenuJson []AppMenuTree syncSeting.Add(1) - newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey) + newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey, myPower) syncSeting.Wait() menuTreeJson, _ := json.Marshal(newAppMenuJson) editForm["listjson"] = string(menuTreeJson) @@ -776,9 +807,16 @@ func (a *ApiMethod) AppMenuShowOrHide(c *gin.Context) { editForm := publicmethod.MapOut[string]() var cusForm modelAppPlatform.CustomerForm err = cusForm.GetCont(map[string]interface{}{"`signCode`": oldMenuInfo.Appkey}, "`listjson`") + + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + appSig := strconv.FormatInt(oldMenuInfo.Appkey, 10) + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, appSig) + var newAppMenuJson []AppMenuTree syncSeting.Add(1) - newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey) + newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey, myPower) syncSeting.Wait() menuTreeJson, _ := json.Marshal(newAppMenuJson) editForm["listjson"] = string(menuTreeJson) @@ -835,9 +873,16 @@ func (a *ApiMethod) DelAppMenu(c *gin.Context) { editForm := publicmethod.MapOut[string]() var cusForm modelAppPlatform.CustomerForm err = cusForm.GetCont(map[string]interface{}{"`signCode`": oldMenuInfo.Appkey}, "`listjson`") + + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + appSig := strconv.FormatInt(oldMenuInfo.Appkey, 10) + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, appSig) + var newAppMenuJson []AppMenuTree syncSeting.Add(1) - newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey) + newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey, myPower) syncSeting.Wait() menuTreeJson, _ := json.Marshal(newAppMenuJson) editForm["listjson"] = string(menuTreeJson) @@ -1459,13 +1504,14 @@ func SaveAppFormMenu(menuId, appkey, parent, creater, cureeTime int64, class int } } - var newAppMenuJson []AppMenuTree - syncSeting.Add(1) - newAppMenuJson = GainAppMenuTree(appkey) - syncSeting.Wait() + // var newAppMenuJson []AppMenuTree + // syncSeting.Add(1) + // newAppMenuJson = GainAppMenuTree(appkey) + // syncSeting.Wait() + // menuTreeJson, _ := json.Marshal(newAppMenuJson) editForm := publicmethod.MapOut[string]() - menuTreeJson, _ := json.Marshal(newAppMenuJson) - editForm["listjson"] = string(menuTreeJson) + + // editForm["listjson"] = string(menuTreeJson) editForm["`edit_time`"] = cureeTime var appCont modelAppPlatform.CustomerForm appCont.EiteCont(map[string]interface{}{"`signCode`": appkey}, editForm) @@ -2329,10 +2375,17 @@ func (a *ApiMethod) EditAppMenusIcon(c *gin.Context) { return } editForm := publicmethod.MapOut[string]() + + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + appSig := strconv.FormatInt(oldMenuInfo.Appkey, 10) + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, appSig) + var cusForm modelAppPlatform.CustomerForm var newAppMenuJson []AppMenuTree syncSeting.Add(1) - newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey) + newAppMenuJson = GainAppMenuTree(oldMenuInfo.Appkey, myPower) syncSeting.Wait() menuTreeJson, _ := json.Marshal(newAppMenuJson) editForm["listjson"] = string(menuTreeJson) @@ -2534,10 +2587,16 @@ func (a *ApiMethod) MoveAppMenus(c *gin.Context) { overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Appmenus{}).Where("`id` IN ?", sunAppId.Key).Updates(sunEditMenu) } + context, _ := c.Get(overall.MyContJwt) + var userCont modelshr.ManCont + userCont.GetLoginCont(context) //当前操作人 + appSig := strconv.FormatInt(oldAppkey, 10) + myPower := publicmethod.GetMyTableMenuPower(userCont.Key, appSig) + //目标App菜单重组 var newAppMenuJson []AppMenuTree syncSeting.Add(1) - newAppMenuJson = GainAppMenuTree(newAppkey) + newAppMenuJson = GainAppMenuTree(newAppkey, myPower) syncSeting.Wait() menuTreeJson, _ := json.Marshal(newAppMenuJson) sunEditMenuJson := publicmethod.MapOut[string]() @@ -2547,7 +2606,7 @@ func (a *ApiMethod) MoveAppMenus(c *gin.Context) { if newAppkey != oldAppkey { var oldAppMenuJson []AppMenuTree syncSeting.Add(1) - oldAppMenuJson = GainAppMenuTree(oldAppkey) + oldAppMenuJson = GainAppMenuTree(oldAppkey, myPower) syncSeting.Wait() menuTreeJsonOld, _ := json.Marshal(oldAppMenuJson) sunoldEditMenuJson := publicmethod.MapOut[string]() diff --git a/api/version1/customerform/form.go b/api/version1/customerform/form.go index ddf87db..17fe6d5 100644 --- a/api/version1/customerform/form.go +++ b/api/version1/customerform/form.go @@ -1542,11 +1542,11 @@ func CreateDataSourceForm(sqlDb *gorm.DB, formName, notes, engine string, isMast if !isTrue { //当数据表不存在时进行创建 if isMasters { //创建主表 - sqlCreateTable := fmt.Sprintf("CREATE TABLE `%v` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`masters_key` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主表标识',`creater` bigint(20) unsigned DEFAULT '0' COMMENT '创建人',`createrOrg` bigint(20) unsigned DEFAULT '0' COMMENT '创建人行政组织',`creater_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`edit_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',`flow_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '流程识别标识',`states` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '状态(1:启用,2:禁用;3:删除)',`flowIsOpen` int(1) unsigned NOT NULL DEFAULT '2' COMMENT '是否开启工作流',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `id` (`id`) USING HASH,UNIQUE KEY `masters_key` (`masters_key`) USING HASH) ENGINE=%v DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, engine, notes) + sqlCreateTable := fmt.Sprintf("CREATE TABLE `%v` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`masters_key` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主表标识',`creater` bigint(20) unsigned DEFAULT '0' COMMENT '创建人',`createrOrg` bigint(20) unsigned DEFAULT '0' COMMENT '创建人行政组织',`createrPositon` bigint(20) unsigned DEFAULT '0' COMMENT '创建人岗位',`creater_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`edit_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',`flow_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '流程识别标识',`states` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '状态(1:启用,2:禁用;3:删除)',`flowIsOpen` int(1) unsigned NOT NULL DEFAULT '2' COMMENT '是否开启工作流',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `id` (`id`) USING HASH,UNIQUE KEY `masters_key` (`masters_key`) USING HASH) ENGINE=%v DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, engine, notes) err = sqlDb.Exec(sqlCreateTable).Error } else { //创建子表 - sqlCreateTable := fmt.Sprintf("CREATE TABLE `%v` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`masters_key` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主表标识',`creater` bigint(20) unsigned DEFAULT '0' COMMENT '创建人',`createrOrg` bigint(20) unsigned DEFAULT '0' COMMENT '创建人行政组织',`creater_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`edit_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',`states` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '状态(1:启用,2:禁用;3:删除)',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `id` (`id`) USING HASH,KEY `masters_key` (`masters_key`) USING HASH) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, notes) + sqlCreateTable := fmt.Sprintf("CREATE TABLE `%v` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`masters_key` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '主表标识',`creater` bigint(20) unsigned DEFAULT '0' COMMENT '创建人',`createrOrg` bigint(20) unsigned DEFAULT '0' COMMENT '创建人行政组织',`createrPositon` bigint(20) unsigned DEFAULT '0' COMMENT '创建人岗位',`creater_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`edit_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '编辑时间',`states` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '状态(1:启用,2:禁用;3:删除)',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `id` (`id`) USING HASH,KEY `masters_key` (`masters_key`) USING HASH) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='%v'", formName, notes) err = sqlDb.Exec(sqlCreateTable).Error } } diff --git a/api/version1/customerform/formTable.go b/api/version1/customerform/formTable.go index b8a7052..0af9c40 100644 --- a/api/version1/customerform/formTable.go +++ b/api/version1/customerform/formTable.go @@ -347,7 +347,7 @@ func (f *FormTableSql) TableSubUnitAnalysis(tablename string, subUnitAry []Maste var sqlAllAry []string fmt.Printf("tablename--->%v===>%v\n", tablename, isMaster) - oldTable := []string{"id", "masters_key", "creater", "createrOrg", "creater_time", "edit_time", "flow_id", "states", "flowIsOpen"} + oldTable := []string{"id", "masters_key", "creater", "createrOrg", "creater_time", "edit_time", "flow_id", "states", "flowIsOpen", "createrPositon"} var alreadyExists []string for _, v := range subUnitAry { @@ -478,6 +478,8 @@ func newFieldOld(tablename string, oldTable, alreadyExists []string) (sql []stri sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN %v int(1) unsigned NOT NULL DEFAULT '2' COMMENT '是否开启工作流';", tablename, v)) case "createrOrg": sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN %v int(1) unsigned NOT NULL DEFAULT '2' COMMENT '创建人行政组织';", tablename, v)) + case "createrPositon": + sql = append(sql, fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN %v int(1) unsigned NOT NULL DEFAULT '2' COMMENT '创建人岗位';", tablename, v)) default: } } diff --git a/api/version1/customerform/formTableList.go b/api/version1/customerform/formTableList.go index 53f3c5f..00e4e96 100644 --- a/api/version1/customerform/formTableList.go +++ b/api/version1/customerform/formTableList.go @@ -60,6 +60,8 @@ func (a *ApiMethod) GainFormPageListContNew(c *gin.Context) { publicmethod.Result(1, err, c, "未知表单!无法获取字段!") return } + // appKey := strconv.FormatInt(formInfo.Groupid, 10) + myPower := publicmethod.GetMyFormPower(userCont.Key, formInfo.Groupid, formInfo.SignCode) //解析表单列表数据结构 var formJsonCont CustomerFormMaster json.Unmarshal([]byte(formInfo.MastesFormJson), &formJsonCont) @@ -98,7 +100,7 @@ func (a *ApiMethod) GainFormPageListContNew(c *gin.Context) { powerSearch.PostId = userCont.Position //岗位 powerSearch.AppKey = formInfo.Groupid //归属哪个App powerSearch.TableId = formInfo.CfId //归属哪个表格 - gormDb = powerSearch.MakeSearchSql(gormDb, userCont, formJsonCont.Form.DataSource) + gormDb = powerSearch.MakeSearchSql(gormDb, userCont, formJsonCont.Form.DataSource, myPower) //Step 4 获取一共有多少条数据 var total int64 totalErr := gormDb.Count(&total).Error @@ -180,7 +182,7 @@ func (a *ApiMethod) GainFormPageListContNew(c *gin.Context) { powerSearch.PostId = userCont.Position //岗位 powerSearch.AppKey = formInfo.Groupid //归属哪个App powerSearch.TableId = formInfo.CfId //归属哪个表格 - gormDb = powerSearch.MakeSearchSql(gormDb, userCont, formJsonCont.Form.DataSource) + gormDb = powerSearch.MakeSearchSql(gormDb, userCont, formJsonCont.Form.DataSource, myPower) //Step 3 获取一共有多少条数据 var total int64 totalErr := gormDb.Count(&total).Error diff --git a/api/version1/dataCenter/runDataBase.go b/api/version1/dataCenter/runDataBase.go index 7325b92..e5652da 100644 --- a/api/version1/dataCenter/runDataBase.go +++ b/api/version1/dataCenter/runDataBase.go @@ -61,5 +61,11 @@ func (a *ApiMethod) GainDataTable(c *gin.Context) { overall.CONSTANT_DB_CustomerForm.Exec(sql) // } } + for _, v := range tableInfo { + // if v.TableKey != "taskrecord" { + sql := fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN %v bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建人岗位';", v.TableKey, "createrPositon") + overall.CONSTANT_DB_CustomerForm.Exec(sql) + // } + } publicmethod.Result(0, tableInfo, c) } diff --git a/api/version1/grantpowers/myAppPower.go b/api/version1/grantpowers/myAppPower.go new file mode 100644 index 0000000..90f5f74 --- /dev/null +++ b/api/version1/grantpowers/myAppPower.go @@ -0,0 +1,103 @@ +package grantpowers + +import ( + "appPlatform/models/modelAppPlatform" + "appPlatform/models/modelssystempermission" + "appPlatform/overall" + "appPlatform/overall/publicmethod" + "encoding/json" + "strconv" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-11 11:12:02 +@ 功能: 处理自定义应用授权数据 +*/ +func (a *ApiMethod) GainAppEmpowerPower(c *gin.Context) { + var requestData GainAppIdAndRoleNew + err := c.ShouldBindJSON(&requestData) + if err != nil { + publicmethod.Result(100, err, c) + return + } + if requestData.Id == "" { + publicmethod.Result(1, err, c, "未知App!不可获取表单列表!") + return + } + appSignCode, _ := strconv.ParseInt(requestData.Id, 10, 64) + + roleIdInt, _ := strconv.ParseInt(requestData.RoleId, 10, 64) + + 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) + var sendList []CusterAppTablePower + for _, v := range appMenuList { + powerInfo, isOk := CallBackAppMenuPower(v, powerInfo.PowerList) + if isOk { + sendList = append(sendList, powerInfo) + } else { + var cfInfo modelAppPlatform.CustomerForm + cfInfo.GetCont(map[string]interface{}{"`signCode`": v.Id}, "`groupid`", "`listjson`") + formPower := GainAppTablePower(roleIdInt, cfInfo.Groupid, v.Id) + var sendInfo CusterAppTablePower + sendInfo.Id = strconv.FormatInt(v.Id, 10) + sendInfo.Name = v.Label + sendInfo.SignCode = strconv.FormatInt(v.Id, 10) + sendInfo.TablePower = formPower.TablePower + sendInfo.ListPower = formPower.ListPower + if cfInfo.ListJson != "" { + sendInfo.IstIsTrue = true + } else { + sendInfo.IstIsTrue = false + } + sendInfo.DatePower.Types = formPower.DatePower.Types + sendInfo.DatePower.Attribute = formPower.DatePower.Attribute + sendInfo.ParentId = v.Parent + sendList = append(sendList, sendInfo) + } + } + outData := publicmethod.MapOut[string]() + // outData["list"] = AppMenuTree(appSignCode, sendList) + outData["list"] = sendList + outData["groupButPower"] = []string{} + outData["formButPower"] = formButPowerList + //获取app按钮控制 + var groupPower modelssystempermission.AuthGroupPower + groupPower.GetCont(map[string]interface{}{"`appType`": requestData.AppType, "`orgPowerType`": requestData.PowerType, "`orgOrUserKey`": roleIdInt}) + if groupPower.PowerInfo != "" { + var butPower []string + json.Unmarshal([]byte(groupPower.PowerInfo), &butPower) + outData["groupButPower"] = butPower + } + publicmethod.Result(0, outData, c) +} + +func AppMenuTree(parentId int64, list []CusterAppTablePower) []CusterAppTablePower { + treeList := []CusterAppTablePower{} + for _, v := range list { + if v.ParentId == parentId { + var treeInfo CusterAppTablePower + treeInfo.Id = v.Id //表单ID + treeInfo.Name = v.Name //表单名称 + treeInfo.SignCode = v.SignCode //表单识别符 + treeInfo.ParentId = v.ParentId //上级 + treeInfo.IstIsTrue = v.IstIsTrue + treeInfo.TableIsAll = v.TableIsAll + treeInfo.TablePower = v.TablePower //表单权限 + treeInfo.ListIsAll = v.ListIsAll + treeInfo.ListPower = v.ListPower //列表权限 + treeInfo.DatePower = v.DatePower //数据权限 + treeInfo.AppButPower = v.AppButPower //页面按钮权限 + idInt, _ := strconv.ParseInt(v.Id, 10, 64) + treeInfo.Children = AppMenuTree(idInt, list) + treeList = append(treeList, treeInfo) + } + } + return treeList +} diff --git a/api/version1/grantpowers/postpower.go b/api/version1/grantpowers/postpower.go index deec678..f01a3a9 100644 --- a/api/version1/grantpowers/postpower.go +++ b/api/version1/grantpowers/postpower.go @@ -527,7 +527,7 @@ func (a *ApiMethod) GainAppTableListNew(c *gin.Context) { // } roleIdInt, _ := strconv.ParseInt(requestData.RoleId, 10, 64) - powerInfo := publicmethod.GetSystemPower(requestData.PowerType, requestData.AppType, requestData.RoleId, requestData.Id) + powerInfo, formButPowerList := publicmethod.GetSystemPower(requestData.PowerType, requestData.AppType, requestData.RoleId, requestData.Id) // var appInfo modelAppPlatform.CustomerForm // appInfo.GetCont(map[string]interface{}{"`signCode`":requestData.Id},"``") var custForm []modelAppPlatform.CustomerForm @@ -558,16 +558,17 @@ func (a *ApiMethod) GainAppTableListNew(c *gin.Context) { } outData := publicmethod.MapOut[string]() outData["list"] = sendList - outData["butPower"] = []string{} + outData["groupButPower"] = []string{} + outData["formButPower"] = formButPowerList //获取app按钮控制 var groupPower modelssystempermission.AuthGroupPower groupPower.GetCont(map[string]interface{}{"`appType`": requestData.AppType, "`orgPowerType`": requestData.PowerType, "`orgOrUserKey`": roleIdInt}) if groupPower.PowerInfo != "" { var butPower []string json.Unmarshal([]byte(groupPower.PowerInfo), &butPower) - outData["butPower"] = butPower + outData["groupButPower"] = butPower } - publicmethod.Result(0, sendList, c) + publicmethod.Result(0, outData, c) // publicmethod.Result(0, custForm, c) } @@ -604,3 +605,40 @@ func CallBackTablePower(tableInfo modelAppPlatform.CustomerForm, powerList []pub } return } + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-11 13:33:37 +@ 功能: 回显自定义app菜单权限 +*/ +func CallBackAppMenuPower(tableInfo modelAppPlatform.Appmenus, powerList []publicmethod.ItemInfo) (sendInfo CusterAppTablePower, isOk bool) { + for _, v := range powerList { + if tableInfo.Id == v.ItemId { + sendInfo.Id = strconv.FormatInt(tableInfo.Id, 10) + sendInfo.Name = tableInfo.Label + sendInfo.ParentId = tableInfo.Parent + sendInfo.SignCode = strconv.FormatInt(tableInfo.Id, 10) + sendInfo.TablePower = v.TablePower + sendInfo.ListPower = v.ListPower + var cfInfo modelAppPlatform.CustomerForm + cfInfo.GetCont(map[string]interface{}{"`signCode`": tableInfo.Id}, "`listjson`") + if cfInfo.ListJson != "" { + sendInfo.IstIsTrue = true + } else { + sendInfo.IstIsTrue = false + } + sendInfo.ListIsAll = v.IsPick + sendInfo.DatePower.Types = int64(v.VisibleRange) + var attId []int64 + for _, iv := range v.VisibleOrg { + // ivInt, _ := strconv.ParseInt(iv, 10, 64) + // attId = append(attId, ivInt) + attId = append(attId, iv) + } + sendInfo.DatePower.Attribute = attId + isOk = true + } + } + return +} diff --git a/api/version1/grantpowers/type.go b/api/version1/grantpowers/type.go index 1d8b9cb..1b7a319 100644 --- a/api/version1/grantpowers/type.go +++ b/api/version1/grantpowers/type.go @@ -59,15 +59,18 @@ type GetRolePowerCont struct { @ 功能: 输出表单权限数据结构 */ type CusterAppTablePower struct { - Id string `json:"id"` //表单ID - Name string `json:"name"` //表单名称 - SignCode string `json:"signCode"` //表单识别符 - IstIsTrue bool `json:"istIsTrue"` - TableIsAll bool `json:"tableIsAll"` - TablePower []string `json:"tablePower"` //表单权限 - ListIsAll bool `json:"listIsAll"` - ListPower []string `json:"listPower"` //列表权限 - DatePower DatePowerInfo `json:"datePower"` //数据权限 + Id string `json:"id"` //表单ID + Name string `json:"name"` //表单名称 + SignCode string `json:"signCode"` //表单识别符 + ParentId int64 `json:"parentId"` //上级 + IstIsTrue bool `json:"istIsTrue"` + TableIsAll bool `json:"tableIsAll"` + TablePower []string `json:"tablePower"` //表单权限 + ListIsAll bool `json:"listIsAll"` + ListPower []string `json:"listPower"` //列表权限 + DatePower DatePowerInfo `json:"datePower"` //数据权限 + AppButPower []string `json:"appButPower"` //页面按钮权限 + Children []CusterAppTablePower `json:"children"` } type DatePowerInfo struct { @@ -75,6 +78,18 @@ type DatePowerInfo struct { Attribute []int64 `json:"attribute"` //全选属性 } +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-11 13:40:50 +@ 功能: 输出自定义App菜单权限 +*/ +type CusterAppMenuPower struct { + Id string `json:"id"` //表单ID + Name string `json:"name"` //表单名称 + IstIsTrue bool `json:"istIsTrue"` +} + /* * @ 作者: 秦东 diff --git a/api/version1/setupRoule/power.go b/api/version1/setupRoule/power.go index 4fa13c5..cf6855f 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.PowerType) var appPowerTrue []AppPowerTree switch requestData.AppSystem { default: diff --git a/api/version1/taskplatform/taskflowing/editformflow.go b/api/version1/taskplatform/taskflowing/editformflow.go index ad432d0..6080f4b 100644 --- a/api/version1/taskplatform/taskflowing/editformflow.go +++ b/api/version1/taskplatform/taskflowing/editformflow.go @@ -473,7 +473,7 @@ func (a *ApiMethod) EditFormLogData(c *gin.Context) { saveData := publicmethod.MapOut[string]() //组装数据表新增数据 - masrWriteMap := taskmanagement.MakeFormMapData(flowInfo.FlowKey, userCont.Key, userCont.AdminOrg, cureeTime, masterField, masterUnitList, 2) + masrWriteMap := taskmanagement.MakeFormMapData(flowInfo.FlowKey, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, masterField, masterUnitList, 2) masterTableJson, _ := json.Marshal(masrWriteMap) editFormDataLogInfo.DataCont = string(masterTableJson) //判断是否有子表 @@ -483,7 +483,7 @@ func (a *ApiMethod) EditFormLogData(c *gin.Context) { for _, v := range formUnitCont.SunFormInfo { sunTypeAry[v.TableName] = v.UbitInfo } - sunTableData := EditSunDatabase(flowInfo.FlowKey, userCont.Key, userCont.AdminOrg, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) + sunTableData := EditSunDatabase(flowInfo.FlowKey, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) fmt.Printf("判断是否有子表得数据-->%v\n", sunTableData) saveData["sunTypeAry"] = sunTableData sunTableJson, _ := json.Marshal(sunTableData) @@ -558,7 +558,7 @@ func (a *ApiMethod) EditFormLogData(c *gin.Context) { # */ -func EditSunDatabase(uuid, creater, createrOrg, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (sunTableData map[string]interface{}) { +func EditSunDatabase(uuid, creater, createrOrg, userPositon, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (sunTableData map[string]interface{}) { if len(masterDataCont) > 0 { if len(sunDataList) > 0 { sunMasterMap := publicmethod.MapOut[string]() @@ -577,7 +577,7 @@ func EditSunDatabase(uuid, creater, createrOrg, createrTime int64, masterTableNa for _, sv := range s { //拆分子表 if sdf, isOk := sv.(map[string]interface{}); isOk { if sunTableType, sunIsOk := sunTable[k]; sunIsOk { - masterWriteVal := taskmanagement.MakeFormMapData(uuid, creater, createrOrg, createrTime, sdf, sunTableType, 2) //转换数据表值 + masterWriteVal := taskmanagement.MakeFormMapData(uuid, creater, createrOrg, userPositon, createrTime, sdf, sunTableType, 2) //转换数据表值 // fmt.Printf("处理指标字段值-1-->%v--->%v\n", sunTableType, masterWriteVal) if len(masterWriteVal) > 0 { sunCont = append(sunCont, masterWriteVal) diff --git a/api/version1/taskplatform/taskmanagement/formcontrol.go b/api/version1/taskplatform/taskmanagement/formcontrol.go index e628d49..baf65a3 100644 --- a/api/version1/taskplatform/taskmanagement/formcontrol.go +++ b/api/version1/taskplatform/taskmanagement/formcontrol.go @@ -114,7 +114,7 @@ func (a *ApiMethod) AddFormAddData(c *gin.Context) { //判断是否 if len(sunFieldAry) > 0 { //有子表 - err = WriteSunDatabase(uuid, userCont.Key, userCont.AdminOrg, cureeTime, formCont.TableKey, masterWriteVal, sunFieldAry, sunTable) + err = WriteSunDatabase(uuid, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, formCont.TableKey, masterWriteVal, sunFieldAry, sunTable) } else { //无子表 err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masterWriteVal).Error @@ -165,7 +165,7 @@ func (a *ApiMethod) AddFormAddData(c *gin.Context) { # */ -func WriteSunDatabase(uuid, creater, userOrg, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { +func WriteSunDatabase(uuid, creater, userOrg, userPositon, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { if len(masterDataCont) > 0 { if len(sunDataList) > 0 { sunMasterMap := publicmethod.MapOut[string]() @@ -183,7 +183,7 @@ func WriteSunDatabase(uuid, creater, userOrg, createrTime int64, masterTableName for _, sv := range s { //拆分子表 if sdf, isOk := sv.(map[string]interface{}); isOk { if sunTableType, sunIsOk := sunTable[k]; sunIsOk { - masterWriteVal := MakeFormMapData(uuid, creater, userOrg, createrTime, sdf, sunTableType, 2) //转换数据表值 + masterWriteVal := MakeFormMapData(uuid, creater, userOrg, userPositon, createrTime, sdf, sunTableType, 2) //转换数据表值 if len(masterWriteVal) > 0 { sunCont = append(sunCont, masterWriteVal) } @@ -566,7 +566,7 @@ func (a *ApiMethod) AddFormAddNewData(c *gin.Context) { masterUnitList[v.Name] = v } - masrWriteMap := MakeFormMapData(uuid, userCont.Key, userCont.AdminOrg, cureeTime, masterField, masterUnitList, 1) + masrWriteMap := MakeFormMapData(uuid, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, masterField, masterUnitList, 1) masrWriteMap["flowIsOpen"] = formCont.FlowIsOpen //任务列表 var taskCont modelAppPlatform.Task @@ -595,7 +595,7 @@ func (a *ApiMethod) AddFormAddNewData(c *gin.Context) { sunTypeAry[v.TableName] = v.UbitInfo } - err = WriteSunDatabase(uuid, userCont.Key, userCont.AdminOrg, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) + err = WriteSunDatabase(uuid, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) } else { // //无子表 err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masrWriteMap).Error @@ -647,7 +647,7 @@ func (a *ApiMethod) AddFormAddNewData(c *gin.Context) { # */ -func MakeFormMapData(uuid, userKey, userOrg, cureeTime int64, fieldVal map[string]interface{}, subUnit map[string]customerform.MasterStruct, calss int) map[string]interface{} { +func MakeFormMapData(uuid, userKey, userOrg, userPositon, cureeTime int64, fieldVal map[string]interface{}, subUnit map[string]customerform.MasterStruct, calss int) map[string]interface{} { keyAndVal := make(map[string]interface{}) if calss == 1 { keyAndVal["creater_time"] = cureeTime @@ -655,6 +655,7 @@ func MakeFormMapData(uuid, userKey, userOrg, cureeTime int64, fieldVal map[strin keyAndVal["masters_key"] = uuid keyAndVal["creater"] = userKey keyAndVal["createrOrg"] = userOrg + keyAndVal["createrPositon"] = userPositon keyAndVal["edit_time"] = cureeTime for k, v := range fieldVal { fmt.Printf("写入字段:%v->%v\n", k, v) @@ -878,7 +879,7 @@ func (a *ApiMethod) AddCustomerForm(c *gin.Context) { masterUnitList[v.Name] = v } - masrWriteMap := MakeFormMapData(uuid, userCont.Key, userCont.AdminOrg, cureeTime, masterField, masterUnitList, 1) + masrWriteMap := MakeFormMapData(uuid, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, masterField, masterUnitList, 1) masrWriteMap["flowIsOpen"] = formCont.FlowIsOpen //任务列表 var taskCont customerForm.TaskRecord @@ -932,7 +933,7 @@ func (a *ApiMethod) AddCustomerForm(c *gin.Context) { sunTypeAry[v.TableName] = v.UbitInfo } - err = WriteSunDatabaseSoucer(sqlDborm, uuid, userCont.Key, userCont.AdminOrg, cureeTime, formJsonCont.Form.DataSourceConfig.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) + err = WriteSunDatabaseSoucer(sqlDborm, uuid, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, formJsonCont.Form.DataSourceConfig.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) } else { // //无子表 @@ -950,7 +951,7 @@ func (a *ApiMethod) AddCustomerForm(c *gin.Context) { sunTypeAry[v.TableName] = v.UbitInfo } - err = WriteSunDatabase(uuid, userCont.Key, userCont.AdminOrg, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) + err = WriteSunDatabase(uuid, userCont.Key, userCont.AdminOrg, userCont.Position, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) } else { // //无子表 @@ -1855,7 +1856,7 @@ func GainOrgManWechat(orgId int64) (wechatMap []string) { # */ -func WriteSunDatabaseSoucer(sqlDb *gorm.DB, uuid, creater, userOrg, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { +func WriteSunDatabaseSoucer(sqlDb *gorm.DB, uuid, creater, userOrg, userPositon, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { if len(masterDataCont) > 0 { if len(sunDataList) > 0 { sunMasterMap := publicmethod.MapOut[string]() @@ -1873,7 +1874,7 @@ func WriteSunDatabaseSoucer(sqlDb *gorm.DB, uuid, creater, userOrg, createrTime for _, sv := range s { //拆分子表 if sdf, isOk := sv.(map[string]interface{}); isOk { if sunTableType, sunIsOk := sunTable[k]; sunIsOk { - masterWriteVal := MakeFormMapData(uuid, creater, userOrg, createrTime, sdf, sunTableType, 2) //转换数据表值 + masterWriteVal := MakeFormMapData(uuid, creater, userOrg, userPositon, createrTime, sdf, sunTableType, 2) //转换数据表值 if len(masterWriteVal) > 0 { sunCont = append(sunCont, masterWriteVal) } diff --git a/api/version1/taskplatform/taskmanagement/importFormFile.go b/api/version1/taskplatform/taskmanagement/importFormFile.go index bd14e25..dcd7365 100644 --- a/api/version1/taskplatform/taskmanagement/importFormFile.go +++ b/api/version1/taskplatform/taskmanagement/importFormFile.go @@ -69,6 +69,7 @@ func (a *ApiMethod) ImportFormListFile(ctx *gin.Context) { valueMap["creater_time"] = cureeTime valueMap["creater"] = userCont.Key valueMap["createrOrg"] = userCont.AdminOrg + valueMap["createrPositon"] = userCont.Position valueMap["edit_time"] = cureeTime i, l := 0, len(title) for k := range data { @@ -101,6 +102,7 @@ func (a *ApiMethod) ImportFormListFile(ctx *gin.Context) { taskCont.VersionId = formCont.Id //来源于哪个表单"` taskCont.Status = 2 taskCont.CreaterOrg = valueMap["createrOrg"].(int64) + taskCont.CreaterPositon = valueMap["createrPositon"].(int64) taskCont.MastesForm = formCont.MastesForm taskCont.MastesFormJson = formCont.MastesFormJson if err = overall.CONSTANT_DB_CustomerForm.Create(&taskCont).Error; err != nil { diff --git a/api/version1/user/setPower.go b/api/version1/user/setPower.go index d1eae41..ef26fbc 100644 --- a/api/version1/user/setPower.go +++ b/api/version1/user/setPower.go @@ -2,6 +2,7 @@ package user import ( "appPlatform/models/modelAppPlatform" + "appPlatform/models/modelshr" "appPlatform/models/modelssystempermission" "appPlatform/overall" "appPlatform/overall/publicmethod" @@ -18,6 +19,8 @@ import ( */ func GetMyPower(powerType string, oupk, org, poetId int64) (allPower SendAllPower, err error) { + allPower.AppGroupPower = GainAppGroupPower(oupk, org, poetId) + //获取系统权限 var systemPower []modelssystempermission.AuthPowerList err = overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.AuthPowerList{}).Where("`appType` = 'system' AND `orgPowerType` = 'person' AND `orgOrUserKey` = ? AND `appKey` = 0", oupk).Find(&systemPower).Error @@ -96,6 +99,9 @@ func GetMyPower(powerType string, oupk, org, poetId int64) (allPower SendAllPowe } 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) } @@ -128,6 +134,86 @@ func GetMyPower(powerType string, oupk, org, poetId int64) (allPower SendAllPowe return } +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-11 15:44:48 +@ 功能: 获取自定义App分组的权限 + + #oupk 个人识别符 + #org 行政组织 + #poetId 岗位 +*/ +func GainAppGroupPower(oupk, org, poetId int64) []string { + var groupPower []string + //Step1: 判断有没有设定个人权限 + groupPower = GainGroupAppPower("person", oupk) + if len(groupPower) > 0 { + return groupPower + } + + //Step2: 获取职位权限 + postPowerArt := GainGroupAppPower("job", poetId) + if len(postPowerArt) > 0 { + for _, v := range postPowerArt { + if !publicmethod.IsInTrue[string](v, groupPower) { + groupPower = append(groupPower, v) + } + } + } + //Step2: 行政组织 + if org != 0 { + var orgPowerList OrgAryPower + orgPowerList.GetOrgPower(org) + + if len(orgPowerList.PowerAry) > 0 { + for _, v := range orgPowerList.PowerAry { + if !publicmethod.IsInTrue[string](v, groupPower) { + groupPower = append(groupPower, v) + } + } + } + + } + return groupPower +} + +func (o *OrgAryPower) GetOrgPower(orgId int64) { + if orgId != 0 { + orgPowerArt := GainGroupAppPower("org", orgId) + if len(orgPowerArt) > 0 { + for _, v := range orgPowerArt { + if !publicmethod.IsInTrue[string](v, o.PowerAry) { + o.PowerAry = append(o.PowerAry, v) + } + } + } else { + var orgInfo modelshr.AdministrativeOrganization + orgInfo.GetCont(map[string]interface{}{"`id`": orgId}, "`superior`") + if orgInfo.Superior != 0 { + o.GetOrgPower(orgInfo.Superior) + } + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-11 16:00:06 +@ 功能: 获取分组授权 +*/ +func GainGroupAppPower(types string, id int64) (powerArt []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) + } + } + return +} + // 合并组织、角色、岗位权限 func MergePower(FormTable []AppMyPower) (list []AppMyPower) { for _, v := range FormTable { //循环所有授权 @@ -197,6 +283,9 @@ func (x *XieChengPowerSys) GetAppFormPower(sysType, powerType string, key int64) } else { appSetUpPower.IsPick = false } + if v.AppButPower != "" && v.AppButPower != "null" { + json.Unmarshal([]byte(v.AppButPower), &appSetUpPower.ButPower) + } appSetUpPower.FormTrue, appSetUpPower.FormPower = GetMyAppTableForm(v.Id) x.FormTable = append(x.FormTable, appSetUpPower) } @@ -221,6 +310,9 @@ func (x *XieChengPowerSys) GetAppFormPower(sysType, powerType string, key int64) } else { appSetUpPower.IsPick = false } + if v.AppButPower != "" && v.AppButPower != "null" { + json.Unmarshal([]byte(v.AppButPower), &appSetUpPower.ButPower) + } appSetUpPower.FormTrue, appSetUpPower.FormPower = GetMyAppTableForm(v.Id) x.FormTable = append(x.FormTable, appSetUpPower) } @@ -248,6 +340,9 @@ func (x *XieChengPowerSys) GetAppFormPower(sysType, powerType string, key int64) } else { appSetUpPower.IsPick = false } + if v.AppButPower != "" && v.AppButPower != "null" { + json.Unmarshal([]byte(v.AppButPower), &appSetUpPower.ButPower) + } appSetUpPower.FormTrue, appSetUpPower.FormPower = GetMyAppTableForm(v.Id) x.FormTable = append(x.FormTable, appSetUpPower) } @@ -269,6 +364,9 @@ func (x *XieChengPowerSys) GetAppFormPower(sysType, powerType string, key int64) } else { appSetUpPower.IsPick = false } + if v.AppButPower != "" && v.AppButPower != "null" { + json.Unmarshal([]byte(v.AppButPower), &appSetUpPower.ButPower) + } appSetUpPower.FormTrue, appSetUpPower.FormPower = GetMyAppTableForm(v.Id) x.FormTable = append(x.FormTable, appSetUpPower) } @@ -305,6 +403,9 @@ func GetMyAppTableForm(authid int64) (formId []string, list []AppMyPowerTable) { if v.VisibleOrg != "" && v.VisibleOrg != "null" { json.Unmarshal([]byte(v.VisibleOrg), &formInfo.ScopeManAry) } + if v.PageButPower != "" && v.PageButPower != "null" { + json.Unmarshal([]byte(v.PageButPower), &formInfo.PagePower) + } list = append(list, formInfo) } return @@ -497,6 +598,9 @@ func GetTablePower(authId int64) (itenIdAry []string, TableList []AppMyPowerTabl if v.ListPower != "" && v.ListPower != "null" { json.Unmarshal([]byte(v.ListPower), &formPwInfo.ListPower) } + if v.PageButPower != "" && v.PageButPower != "null" { + json.Unmarshal([]byte(v.PageButPower), &formPwInfo.PagePower) + } TableList = append(TableList, formPwInfo) } return diff --git a/api/version1/user/type.go b/api/version1/user/type.go index 1734910..1ca8494 100644 --- a/api/version1/user/type.go +++ b/api/version1/user/type.go @@ -130,8 +130,9 @@ type SendAllPower struct { SystemPower []SystemInfoPower `json:"systemPower"` MenuIdAry []int64 `json:"menuIdAry"` MenuButIdAry []string `json:"menuButIdAry"` - AppSystemPower []AppMyPower `json:"AppSystemPower"` + AppSystemPower []AppMyPower `json:"appSystemPower"` AppKeyAry []string `json:"appKeyAry"` + AppGroupPower []string `json:"appGroupPower"` //自定义App分组权限 } type SystemInfoPower struct { @@ -180,6 +181,7 @@ type AppMyPower struct { IsPick bool `json:"isPick` FormTrue []string `json:"formTrue"` FormPower []AppMyPowerTable `json:"formPower"` + ButPower []string `json:"butPower"` } type AppMyPowerTable struct { AppId string `json:"AppId"` @@ -188,4 +190,10 @@ type AppMyPowerTable struct { TablePower []string `json:"tablePower"` Scope int `json:"scope"` ScopeManAry []int `json:"scopeManAry"` + PagePower []string `json:"PagePower"` +} + +// 获取行政组织矩阵权限 +type OrgAryPower struct { + PowerAry []string } diff --git a/apirouter/v1/grantsystempower/pc.go b/apirouter/v1/grantsystempower/pc.go index e542176..f55efed 100644 --- a/apirouter/v1/grantsystempower/pc.go +++ b/apirouter/v1/grantsystempower/pc.go @@ -20,5 +20,6 @@ func (a *ApiRouter) RouterGroupPc(router *gin.RouterGroup) { apiRouter.POST("gainAppTableList", methodBinding.GainAppTableList) //获取对应App下边的表单 apiRouter.POST("setpAppTableForms", methodBinding.SetpAppTableForm) //提交APp单一表单权限 apiRouter.POST("gainAppTableListNew", methodBinding.GainAppTableListNew) //获取对应App下边的表单 + apiRouter.POST("gainAppEmpowerPower", methodBinding.GainAppEmpowerPower) //获取对应App下边的菜单 } } diff --git a/models/customerForm/taskrecord.go b/models/customerForm/taskrecord.go index b28730f..811a717 100644 --- a/models/customerForm/taskrecord.go +++ b/models/customerForm/taskrecord.go @@ -31,6 +31,7 @@ type TaskRecord struct { RunFlowId int64 `json:"runFlowId" gorm:"column:runFlowId;type:bigint(20) unsigned;default:0;not null;comment:正在执行得流程"` MsgId int64 `json:"msgId" gorm:"column:msgId;type:bigint(20) unsigned;default:0;not null;comment:发送消息得任务ID"` CreaterOrg int64 `json:"createrOrg" gorm:"column:createrOrg;type:bigint(20) unsigned;default:0;not null;comment:发起人行政组织"` + CreaterPositon int64 `json:"createrPositon" gorm:"column:createrPositon;type:bigint(20) unsigned;default:0;not null;comment:发起人岗位"` } func (TaskRecord *TaskRecord) TableName() string { diff --git a/models/modelssystempermission/authpowerlist.go b/models/modelssystempermission/authpowerlist.go index 880b21c..33fb0bd 100644 --- a/models/modelssystempermission/authpowerlist.go +++ b/models/modelssystempermission/authpowerlist.go @@ -17,6 +17,7 @@ type AuthPowerList struct { VisibleOrg string `gorm:"column:visibleOrg;type:text;comment:可见范围辅助参数" json:"visibleOrg"` ButPower string `gorm:"column:butPower;type:text;comment:按钮权限" json:"butPower"` Time int64 `gorm:"column:time;type:bigint(20) unsigned;default:0;comment:编辑时间;NOT NULL" json:"time"` + PageButPower string `gorm:"column:pageButPower;type:text;comment:页面表单权限" json:"pageButPower"` OrgPowerType string `gorm:"column:orgPowerType;type:varchar(20);comment:赋权类型(org:组织;job:岗位;role:角色;person:个人)" json:"orgPowerType"` OrgOrUserKey int64 `gorm:"column:orgOrUserKey;type:bigint(20) unsigned;default:0;comment:行政组织或角色、人员识别符;NOT NULL" json:"orgOrUserKey"` @@ -24,6 +25,7 @@ type AuthPowerList struct { AppKey int64 `gorm:"column:appKey;type:bigint(20) unsigned;default:0;comment:自定义应用App" json:"appKey"` IsTrue int `gorm:"column:isTrue;type:int(1) unsigned;default:0;comment:是否有权(1:有;非1:无);NOT NULL" json:"isTrue"` PowerInfo string `json:"powerInfo" gorm:"column:powerInfo;type:text;comment:权限结构体"` + AppButPower string `gorm:"column:appButPower;type:text;comment:自定义应用按钮授权" json:"appButPower"` } func (cont *AuthPowerList) TableName() string { diff --git a/overall/publicmethod/getUserPower.go b/overall/publicmethod/getUserPower.go index 44b8225..e989cb1 100644 --- a/overall/publicmethod/getUserPower.go +++ b/overall/publicmethod/getUserPower.go @@ -221,7 +221,7 @@ func (g *GainUserPower) GetUserPower() (powerInfo SendUserPower) { # */ -func (g *GainUserPower) MakeSearchSql(gormDb *gorm.DB, userCont modelshr.ManCont, isOdeb string) *gorm.DB { +func (g *GainUserPower) MakeSearchSql(gormDb *gorm.DB, userCont modelshr.ManCont, isOdeb string, appFormPower AppMyPowerTable) *gorm.DB { powerInfo := g.GetUserPower() // js, _ := json.Marshal(powerInfo) fmt.Printf("\n\n\n等级-----%v--- ---->%v\n\n\n", isOdeb, powerInfo) @@ -254,7 +254,28 @@ func (g *GainUserPower) MakeSearchSql(gormDb *gorm.DB, userCont modelshr.ManCont // gormDb = gormDb.Where("f.`creater` = ?", userCont.Key) } } + //确定可以看到数据的边界 + //1:本人;2:本岗位;3:本部门;4:本分部;5:指定行政组织;6:所有 + switch appFormPower.Scope { + case 2: + gormDb = gormDb.Where("f.`createrPositon` = ?", userCont.Key) + case 3: + var sunOrg GetOrgAllParent + sunOrg.GetOrgSun(userCont.MainDeparment) + sunOrg.Id = append(sunOrg.Id, userCont.MainDeparment) + gormDb = gormDb.Where("f.`createrOrg` IN ?", sunOrg.Id) + case 4: + var sunOrg GetOrgAllParent + sunOrg.GetOrgSun(userCont.Company) + sunOrg.Id = append(sunOrg.Id, userCont.MainDeparment) + gormDb = gormDb.Where("f.`createrOrg` IN ?", sunOrg.Id) + case 5: + gormDb = gormDb.Where("f.`createrOrg` IN ?", appFormPower.ScopeManAry) + case 6: + default: + } + gormDb = gormDb.Where("f.`creater` = ?", userCont.Key) return gormDb } @@ -264,7 +285,7 @@ func (g *GainUserPower) MakeSearchSql(gormDb *gorm.DB, userCont modelshr.ManCont @ 时间: 2025-11-21 09:38:23 @ 功能: 根据系统参数获取权限 */ -func GetSystemPower(powerType, systemTyep, powerId, systemId string) (powerInfo SendSystemPower) { +func GetSystemPower(powerType, systemTyep, powerId, systemId string) (powerInfo SendSystemPower, tableBut []string) { powerInfo.PowerType = powerType powerInfo.SystemTyep = systemTyep powerInfo.PowerId = powerId @@ -287,13 +308,16 @@ func GetSystemPower(powerType, systemTyep, powerId, systemId string) (powerInfo default: } err := gormDb.First(&masterPower).Error + if masterPower.AppButPower != "" { + json.Unmarshal([]byte(masterPower.AppButPower), &tableBut) + } if err != nil { if powerType == "person" { var userInfo modelshr.PersonArchives userInfo.GetCont(map[string]interface{}{"`key`": powerId}, "`id`", "`company`", "`maindeparment`", "`admin_org`", "`position`") var roleId []int64 overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.SystemRole{}).Select("`id`").Where("FIND_IN_SET(?, `roleuser`)", powerId).Find(&roleId) - powerInfo.SystemIsPick, powerInfo.PowerList = PersonalAuthorization(systemTyep, systemId, roleId, userInfo) + powerInfo.SystemIsPick, powerInfo.PowerList, tableBut = PersonalAuthorization(systemTyep, systemId, roleId, userInfo) } fmt.Printf("没有个人授权--->%v\n\n\n", masterPower) @@ -344,7 +368,7 @@ func GetSystemPower(powerType, systemTyep, powerId, systemId string) (powerInfo @ 时间: 2025-12-05 09:19:08 @ 功能: 当个人没有设定自定义权限的时候返回其所在其他维度的赋权情况 */ -func PersonalAuthorization(systemTyep, systemId string, roleId []int64, userInfo modelshr.PersonArchives) (isTrue bool, PowerList []ItemInfo) { +func PersonalAuthorization(systemTyep, systemId string, roleId []int64, userInfo modelshr.PersonArchives) (isTrue bool, PowerList []ItemInfo, tableBut []string) { //获取角色相关授权 var masterPower []modelssystempermission.AuthPower gormDb := overall.CONSTANT_DB_System_Permission.Model(&masterPower).Where("`orgPowerType` = 'role' AND `orgOrUserKey` IN ? AND `appType` = ?", roleId, systemTyep) @@ -363,6 +387,11 @@ func PersonalAuthorization(systemTyep, systemId string, roleId []int64, userInfo isTrue = true } autId = append(autId, v.Id) + if v.AppButPower != "" { + var tbinfo []string + json.Unmarshal([]byte(v.AppButPower), &tbinfo) + tableBut = append(tableBut, tbinfo...) + } } if len(autId) > 0 { @@ -389,6 +418,13 @@ func PersonalAuthorization(systemTyep, systemId string, roleId []int64, userInfo isTrue = true } } + + if masterPowerPost.AppButPower != "" { + var tbinfo []string + json.Unmarshal([]byte(masterPowerPost.AppButPower), &tbinfo) + tableBut = append(tableBut, tbinfo...) + } + var poserListPost []modelssystempermission.PowerInfo overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.PowerInfo{}).Where("`authId` = ?", masterPowerPost.Id).Find(&poserListPost) PowerList = append(PowerList, mergePowerAry(poserListPost, PowerList)...) @@ -396,48 +432,62 @@ func PersonalAuthorization(systemTyep, systemId string, roleId []int64, userInfo } //根据行政组织 if userInfo.AdminOrg != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.AdminOrg) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.AdminOrg) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } else if userInfo.MainDeparment != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.MainDeparment) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.MainDeparment) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } else if userInfo.Company != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.Company) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.Company) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } } } else if userInfo.Company != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.Company) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.Company) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } } } else if userInfo.MainDeparment != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.MainDeparment) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.MainDeparment) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } else if userInfo.Company != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.Company) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.Company) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } } } else if userInfo.Company != 0 { - adOrgList, isTrues := OrgGetPower(systemTyep, systemId, userInfo.Company) + adOrgList, isTrues, taButPwer := OrgGetPower(systemTyep, systemId, userInfo.Company) isTrue = isTrues if len(adOrgList) > 0 { + tableBut = append(tableBut, taButPwer...) PowerList = append(PowerList, mergePowerAry(adOrgList, PowerList)...) } } + var quchong []string + for _, v := range tableBut { + if !IsInTrue[string](v, quchong) { + quchong = append(quchong, v) + } + } + tableBut = quchong return } @@ -447,7 +497,7 @@ func PersonalAuthorization(systemTyep, systemId string, roleId []int64, userInfo @ 时间: 2025-12-05 11:04:26 @ 功能: 根据行政组织获取授权 */ -func OrgGetPower(systemTyep, systemId string, orgId int64) (PowerList []modelssystempermission.PowerInfo, isTrue bool) { +func OrgGetPower(systemTyep, systemId string, orgId int64) (PowerList []modelssystempermission.PowerInfo, isTrue bool, tableButPow []string) { var masterPower modelssystempermission.AuthPower gormDb := overall.CONSTANT_DB_System_Permission.Model(&masterPower).Where("`orgPowerType` = 'org' AND `orgOrUserKey` = ? AND `appType` = ?", orgId, systemTyep) switch systemTyep { @@ -464,6 +514,11 @@ func OrgGetPower(systemTyep, systemId string, orgId int64) (PowerList []modelssy if masterPower.IsTrue == 1 { isTrue = true } + if masterPower.AppButPower != "" { + var tbinfo []string + json.Unmarshal([]byte(masterPower.AppButPower), &tbinfo) + tableButPow = append(tableButPow, tbinfo...) + } overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.PowerInfo{}).Where("`authId` = ?", masterPower.Id).Find(&PowerList) return } diff --git a/overall/publicmethod/powerRedis.go b/overall/publicmethod/powerRedis.go index d2c3166..2a7c1cc 100644 --- a/overall/publicmethod/powerRedis.go +++ b/overall/publicmethod/powerRedis.go @@ -5,6 +5,7 @@ import ( "appPlatform/overall" "encoding/json" "fmt" + "strconv" ) /* @@ -64,6 +65,29 @@ func GetMyTableMenuPower(userKey int64, menuId string) (menuPower SendAppTabelPo if v.AppId == menuId { menuPower.FormPower = v.FormPower menuPower.FormTrue = v.FormTrue + menuPower.ButPower = v.ButPower + } + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-12-12 15:35:29 +@ 功能: 获取自定义应用具体单一表单权限 +*/ +func GetMyFormPower(userKey, appKey, formKey int64) (menuPower AppMyPowerTable) { + appKeyStr := strconv.FormatInt(appKey, 10) + formKeyStr := strconv.FormatInt(formKey, 10) + myPower := GetSystemPowerInfo(userKey) + for _, v := range myPower.AppSystemPower { + if v.AppId == appKeyStr { + for _, fv := range v.FormPower { + if fv.AppId == formKeyStr { + menuPower = fv + } + } } } return diff --git a/overall/publicmethod/type.go b/overall/publicmethod/type.go index 4d3d192..f71446d 100644 --- a/overall/publicmethod/type.go +++ b/overall/publicmethod/type.go @@ -442,6 +442,7 @@ type AppMyPower struct { IsPick bool `json:"isPick` FormTrue []string `json:"formTrue"` FormPower []AppMyPowerTable `json:"formPower"` + ButPower []string `json:"butPower"` } type AppMyPowerTable struct { AppId string `json:"AppId"` @@ -461,4 +462,5 @@ type OrgIdLevel struct { type SendAppTabelPower struct { FormTrue []string `json:"formTrue"` FormPower []AppMyPowerTable `json:"formPower"` + ButPower []string `json:"butPower"` }