Browse Source

fix:ETA图表权限控制

Roc 11 months ago
parent
commit
b587f063be

+ 48 - 6
controllers/data_manage/chart_classify.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"fmt"
 	"strconv"
@@ -274,10 +275,18 @@ func (this *ChartClassifyController) ChartClassifyItems() {
 		return
 	}
 
+	// 已授权分类id
+	permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+		return
+	}
+
 	nodeAll := make([]*data_manage.ChartClassifyItems, 0)
 	for k := range rootList {
 		rootNode := rootList[k]
-		data.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
+		data.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode, permissionClassifyIdList)
 		nodeAll = append(nodeAll, rootNode)
 	}
 
@@ -416,10 +425,18 @@ func (this *ChartClassifyController) EditChartClassify() {
 		br.Msg = "获取分类信息失败,Err:" + err.Error()
 		return
 	}
+	// 已授权分类id
+	permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, item.ChartClassifyId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+		return
+	}
+	haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ChartClassifyId, permissionClassifyIdList)
 
 	// 权限校验
 	{
-		button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
+		button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId, haveOperaAuth)
 		if !button.OpButton {
 			br.Msg = "无操作权限"
 			br.IsSendEmail = false
@@ -488,9 +505,17 @@ func (this *ChartClassifyController) DeleteChartClassifyCheck() {
 			br.Msg = "获取分类信息失败,Err:" + err.Error()
 			return
 		}
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, item.ChartClassifyId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
 		// 权限校验
 		{
-			button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
+			haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ChartClassifyId, permissionClassifyIdList)
+			button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId, haveOperaAuth)
 			if !button.OpButton {
 				br.Msg = "无操作权限"
 				br.IsSendEmail = false
@@ -580,9 +605,18 @@ func (this *ChartClassifyController) DeleteChartClassify() {
 			br.Msg = "获取分类信息失败,Err:" + err.Error()
 			return
 		}
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, item.ChartClassifyId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
+
 		// 权限校验
 		{
-			button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
+			haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ChartClassifyId, permissionClassifyIdList)
+			button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId, haveOperaAuth)
 			if !button.OpButton {
 				br.Msg = "无操作权限"
 				br.IsSendEmail = false
@@ -798,10 +832,18 @@ func (this *ChartClassifyController) ChartClassifyMove() {
 		br.Msg = "移动失败,分类名称已存在"
 		return
 	}
-
+	// 已授权分类id
+	permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, chartClassifyInfo.ChartClassifyId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+		return
+	}
 	// 权限校验
 	{
-		button := data.GetChartClassifyOpButton(this.SysUser, chartClassifyInfo.SysUserId)
+		haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(chartClassifyInfo.IsJoinPermission, chartClassifyInfo.ChartClassifyId, permissionClassifyIdList)
+
+		button := data.GetChartClassifyOpButton(this.SysUser, chartClassifyInfo.SysUserId, haveOperaAuth)
 		if !button.OpButton {
 			br.Msg = "无操作权限"
 			br.IsSendEmail = false

+ 35 - 0
controllers/data_manage/my_chart.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -132,6 +133,40 @@ func (this *MyChartController) ChartList() {
 	listLen := len(list)
 	chartEdbMap := make(map[int][]*data_manage.ChartEdbInfoMapping)
 	if listLen > 0 {
+		// 分类id
+		classifyIdList := make([]int, 0)
+		// 当前列表中的分类map
+		classifyMap := make(map[int]*data_manage.ChartClassify)
+		for _, v := range list {
+			classifyIdList = append(classifyIdList, v.ChartClassifyId)
+		}
+		classifyList, err := data_manage.GetChartClassifyByIdList(classifyIdList)
+		if err != nil {
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分类列表失败,Err:" + err.Error()
+				return
+			}
+		}
+		for _, v := range classifyList {
+			classifyMap[v.ChartClassifyId] = v
+		}
+
+		// 已授权分类id
+		permissionChartIdList, permissionClassifyIdList, err := data_manage_permission.GetUserChartAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
+
+		// 权限
+		for k, chartViewInfo := range list {
+			if currClassify, ok := classifyMap[chartViewInfo.ChartClassifyId]; ok {
+				list[k].HaveOperaAuth = data_manage_permission.CheckChartPermissionByPermissionIdList(chartViewInfo.IsJoinPermission, currClassify.IsJoinPermission, chartViewInfo.ChartInfoId, chartViewInfo.ChartClassifyId, permissionChartIdList, permissionClassifyIdList)
+			}
+		}
+
 		chartInfoIds := ""
 		for _, v := range list {
 			chartInfoIds += strconv.Itoa(v.ChartInfoId) + ","

+ 20 - 0
models/data_manage/chart_classify.go

@@ -150,6 +150,7 @@ type ChartClassifyItems struct {
 	Children            []*ChartClassifyItems
 	Button              ChartClassifyItemsButton `description:"按钮权限"`
 	IsJoinPermission    int                      `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth       bool                     `description:"是否有数据权限,默认:false"`
 }
 
 // ChartClassifyItemsButton 操作按钮
@@ -327,3 +328,22 @@ func GetChartClassifyByParentIdAndName(parentId int, classifyName string, classi
 	err = o.Raw(sql, parentId, classifyName, classifyId).QueryRow(&item)
 	return
 }
+
+// GetChartClassifyByIdList
+// @Description:  根据分类ID列表获取分类
+// @author: Roc
+// @datetime 2024-04-01 13:21:48
+// @param classifyId []int
+// @return items []*ChartClassify
+// @return err error
+func GetChartClassifyByIdList(classifyIdList []int) (items []*ChartClassify, err error) {
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_classify WHERE chart_classify_id in (` + utils.GetOrmInReplace(num) + `) `
+	_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
+
+	return
+}

+ 3 - 0
models/data_manage/chart_info.go

@@ -54,6 +54,7 @@ type ChartInfo struct {
 	MarkersAreas      string `description:"标识区"`
 	Unit              string `description:"中文单位名称"`
 	UnitEn            string `description:"英文单位名称"`
+	IsJoinPermission  int    `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 }
 
 type ChartInfoMore struct {
@@ -1452,6 +1453,8 @@ type ChartInfoView struct {
 	Instructions      string          `description:"图表说明"`
 	MarkersLines      string          `description:"标识线"`
 	MarkersAreas      string          `description:"标识区"`
+	IsJoinPermission  int             `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth     bool            `description:"是否有数据权限,默认:false"`
 }
 
 type ChartViewButton struct {

+ 16 - 6
services/data/chart_classify.go

@@ -3,6 +3,7 @@ package data
 import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"fmt"
 	"strconv"
@@ -21,14 +22,16 @@ func chartClassifyHaveChild(allNode []*data_manage.ChartClassifyItems, node *dat
 	return
 }
 
-func ChartClassifyItemsMakeTree(sysUser *system.Admin, allNode []*data_manage.ChartClassifyItems, node *data_manage.ChartClassifyItems) {
-	button := GetChartClassifyOpButton(sysUser, node.SysUserId)
+func ChartClassifyItemsMakeTree(sysUser *system.Admin, allNode []*data_manage.ChartClassifyItems, node *data_manage.ChartClassifyItems, permissionClassifyIdList []int) {
+	node.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(node.IsJoinPermission, node.ChartClassifyId, permissionClassifyIdList)
+	button := GetChartClassifyOpButton(sysUser, node.SysUserId, node.HaveOperaAuth)
 	node.Button = button
 
 	childs, _ := chartClassifyHaveChild(allNode, node) //判断节点是否有子节点并返回
 	if len(childs) > 0 {
 		for _, child := range childs {
-			childButton := GetChartClassifyOpButton(sysUser, child.SysUserId)
+			child.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(child.IsJoinPermission, child.ChartClassifyId, permissionClassifyIdList)
+			childButton := GetChartClassifyOpButton(sysUser, child.SysUserId, child.HaveOperaAuth)
 			if child.Level == 3 {
 				childButton.AddButton = false //第三级的话,默认图表都是没有添加按钮的
 			}
@@ -36,10 +39,12 @@ func ChartClassifyItemsMakeTree(sysUser *system.Admin, allNode []*data_manage.Ch
 			//node.Children = append(node.Children, child)
 		}
 		node.Children = append(node.Children, childs[0:]...) //添加子节点
-		for _, v := range childs {                           //查询子节点的子节点,并添加到子节点
+		for _, v := range childs {
+			v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ChartClassifyId, permissionClassifyIdList)
+			//查询子节点的子节点,并添加到子节点
 			_, has := chartClassifyHaveChild(allNode, v)
 			if has {
-				ChartClassifyItemsMakeTree(sysUser, allNode, v) //递归添加节点
+				ChartClassifyItemsMakeTree(sysUser, allNode, v, permissionClassifyIdList) //递归添加节点
 			} else {
 				childrenArr := make([]*data_manage.ChartClassifyItems, 0)
 				v.Children = childrenArr
@@ -107,7 +112,12 @@ func FixChartClassifySysUserId() {
 }
 
 // GetChartClassifyOpButton 获取ETA图库分类的操作权限
-func GetChartClassifyOpButton(sysUser *system.Admin, belongUserId int) (button data_manage.ChartClassifyItemsButton) {
+func GetChartClassifyOpButton(sysUser *system.Admin, belongUserId int, haveOperaAuth bool) (button data_manage.ChartClassifyItemsButton) {
+	// 没有数据权限就直接返回
+	if !haveOperaAuth {
+		return
+	}
+
 	//ficc管理员和超管和ficc研究员有权限创建和管理分类,可以编辑分类名称(分类名称不允许重复),可以拖动分类,改变分类顺序,可以拖动分类下模型,改变顺序,可以删除分类,若分类下有预测指标,则不允许删除;
 	//if utils.InArrayByStr([]string{utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RESEARCHR, utils.ROLE_TYPE_CODE_FICC_RESEARCHR}, sysUser.RoleTypeCode) {
 	button.AddButton = true

+ 1 - 1
services/data/data_manage_permission/data_move.go

@@ -168,7 +168,7 @@ func GetChartMenuTreeRecursive(list []*data_manage.ChartClassifyItems, parentId
 		t.ClassifyId = v.ChartClassifyId
 		t.ClassifyName = v.ChartClassifyName
 		t.ParentId = v.ParentId
-		t.IsJoinPermission = v.ParentId
+		t.IsJoinPermission = v.IsJoinPermission
 		if v.ParentId == parentId {
 			t.Child = GetChartMenuTreeRecursive(list, v.ChartClassifyId)
 			res = append(res, t)