ソースを参照

fix:追溯添加权限,图表列表权限校验补充

Roc 1 年間 前
コミット
0130fd3eb9

+ 2 - 1
controllers/data_manage/data_manage_permission/data_move.go

@@ -315,7 +315,7 @@ func (c *DataMangePermissionController) MoveAllEdbChartUser() {
 		return
 	}
 
-	if len(req.Source) < 0 {
+	if len(req.Source) <= 0 {
 		br.Msg = "请选择来源"
 		br.IsSendEmail = false
 		return
@@ -326,6 +326,7 @@ func (c *DataMangePermissionController) MoveAllEdbChartUser() {
 		br.IsSendEmail = false
 		return
 	}
+
 	if req.NewUserId <= 0 {
 		br.Msg = "请选择新的创建人"
 		br.IsSendEmail = false

+ 1 - 1
controllers/data_manage/edb_info.go

@@ -4342,7 +4342,7 @@ func (this *EdbInfoController) TraceEdbInfo() {
 		return
 	}
 
-	resp, err := data.TraceEdbInfoByEdbInfoId(edbInfo.EdbInfoId)
+	resp, err := data.TraceEdbInfoByEdbInfoId(edbInfo.EdbInfoId, this.SysUser.AdminId)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.Msg = "获取失败,Err:" + err.Error()

+ 7 - 0
controllers/data_manage/excel/excel_classify.go

@@ -233,6 +233,13 @@ func AnalysisClassifyList(this *ExcelClassifyController) {
 	br.Data = resp
 }
 
+// removeNodesWithAnalysisClassify
+// @Description:  自定义分析只看自己的分类,所以需要移除分类
+// @author: Roc
+// @datetime 2024-04-09 13:46:51
+// @param nodes []*excel.ExcelClassifyItems
+// @param adminId int
+// @return []*excel.ExcelClassifyItems
 func removeNodesWithAnalysisClassify(nodes []*excel.ExcelClassifyItems, adminId int) []*excel.ExcelClassifyItems {
 	var newListNode []*excel.ExcelClassifyItems
 

+ 2 - 2
models/data_manage/chart_info.go

@@ -1970,7 +1970,7 @@ type RollingCorrelationChartDataResp struct {
 func GetChartInfoAllByClassifyId(source, classifyId int) (items []*ChartClassifyItems, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT chart_info_id,chart_classify_id,chart_name AS chart_classify_name,chart_name_en AS chart_classify_name_en,
-             unique_code,sys_user_id,sys_user_real_name,date_type,start_date,end_date,chart_type,calendar,season_start_date,season_end_date
+             unique_code,sys_user_id,sys_user_real_name,date_type,start_date,end_date,chart_type,calendar,season_start_date,season_end_date,is_join_permission
             FROM chart_info WHERE chart_classify_id = ? AND source = ?  ORDER BY sort asc,create_time DESC `
 	_, err = o.Raw(sql, classifyId, source).QueryRows(&items)
 	return
@@ -2000,7 +2000,7 @@ func GetChartInfoByAdminIdAndClassify(sourceList []int, adminId, classifyId int)
 
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT chart_info_id,chart_classify_id,chart_name AS chart_classify_name,
-             unique_code,sys_user_id,sys_user_real_name,date_type,start_date,end_date,chart_type,calendar,season_start_date,season_end_date
+             unique_code,sys_user_id,sys_user_real_name,date_type,start_date,end_date,chart_type,calendar,season_start_date,season_end_date,is_join_permission
             FROM chart_info where source in (` + utils.GetOrmInReplace(num) + `)  AND sys_user_id = ? AND chart_classify_id = ? ORDER BY sort asc,create_time ASC `
 	_, err = o.Raw(sql, sourceList, adminId, classifyId).QueryRows(&items)
 	return

+ 11 - 10
models/data_manage/edb_info.go

@@ -1716,16 +1716,17 @@ func GetEdbInfoAndClassifyListByEdbIdList(edbIdList []int) (items []*EdbAndClass
 
 // TraceEdbInfoResp 指标追溯数据返回
 type TraceEdbInfoResp struct {
-	EdbInfoId   int                `description:"指标id"`
-	EdbInfoType int                `description:"指标类型: 0-普通指标; 1-预测指标"`
-	EdbName     string             `description:"指标名称"`
-	EdbType     int                `description:"指标类型: 1-基础指标; 2-计算指标"`
-	RuleTitle   string             `description:"指标规则"`
-	UniqueCode  string             `description:"唯一编码"`
-	ClassifyId  int                `description:"分类ID"`
-	Child       []TraceEdbInfoResp `description:"下级来源"`
-	IsStop      int8               `description:"是否终止"`
-	EdbInfo     *EdbInfo           `description:"指标信息" json:"-"`
+	EdbInfoId     int                `description:"指标id"`
+	EdbInfoType   int                `description:"指标类型: 0-普通指标; 1-预测指标"`
+	EdbName       string             `description:"指标名称"`
+	EdbType       int                `description:"指标类型: 1-基础指标; 2-计算指标"`
+	RuleTitle     string             `description:"指标规则"`
+	UniqueCode    string             `description:"唯一编码"`
+	ClassifyId    int                `description:"分类ID"`
+	Child         []TraceEdbInfoResp `description:"下级来源"`
+	IsStop        int8               `description:"是否终止"`
+	EdbInfo       *EdbInfo           `description:"指标信息" json:"-"`
+	HaveOperaAuth bool               `description:"是否有数据权限,默认:false"`
 }
 
 // BeforeAndAfterDateDataResp 前后几期数据

+ 43 - 4
services/data/edb_info.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/services/elastic"
 	"eta/eta_api/utils"
 	"fmt"
@@ -1871,7 +1872,7 @@ func EdbInfoAdd(source, subSource, classifyId int, edbCode, edbName, frequency,
 }
 
 // TraceEdbInfoByEdbInfoId 指标追溯
-func TraceEdbInfoByEdbInfoId(edbInfoId int) (traceEdbInfo data_manage.TraceEdbInfoResp, err error) {
+func TraceEdbInfoByEdbInfoId(edbInfoId, sysUserId int) (traceEdbInfo data_manage.TraceEdbInfoResp, err error) {
 	edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
 	if err != nil {
 		return
@@ -1900,6 +1901,7 @@ func TraceEdbInfoByEdbInfoId(edbInfoId int) (traceEdbInfo data_manage.TraceEdbIn
 	for _, v := range findIdMap {
 		edbInfoIdList = append(edbInfoIdList, v)
 	}
+	classifyIdList := make([]int, 0)
 	edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
 	if err != nil {
 		return
@@ -1907,8 +1909,42 @@ func TraceEdbInfoByEdbInfoId(edbInfoId int) (traceEdbInfo data_manage.TraceEdbIn
 	edbInfoMap := make(map[int]*data_manage.EdbInfo)
 	for _, tmpEdbInfo := range edbInfoList {
 		edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo
+		classifyIdList = append(classifyIdList, tmpEdbInfo.ClassifyId)
 	}
-	traceEdbInfo, err = handleTraceEdbInfo(traceEdbInfo, 0, edbInfoMap, edbMappingMap)
+
+	// 指标权限Map
+	edbInfoIdPermissionMap := make(map[int]bool)
+	// 指标权限
+	{
+		// 当前的分类
+		classifyMap := make(map[int]*data_manage.EdbClassify)
+		classifyList, tmpErr := data_manage.GetEdbClassifyByIdList(classifyIdList)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range classifyList {
+			classifyMap[v.ClassifyId] = v
+		}
+
+		// 获取所有有权限的指标和分类
+		permissionEdbIdList, permissionClassifyIdList, tmpErr := data_manage_permission.GetUserEdbAndClassifyPermissionList(sysUserId, 0, 0)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		for _, v := range edbInfoMap {
+			if currClassify, ok := classifyMap[v.ClassifyId]; ok {
+				edbInfoIdPermissionMap[v.EdbInfoId] = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+			}
+		}
+	}
+
+	traceEdbInfo, err = handleTraceEdbInfo(traceEdbInfo, 0, edbInfoMap, edbMappingMap, edbInfoIdPermissionMap)
+
+	// 权限校验
+
 	return
 }
 
@@ -2025,7 +2061,7 @@ func traceEdbInfoByEdbInfoId(edbInfoId int, traceEdbInfo data_manage.TraceEdbInf
 	return
 }
 
-func handleTraceEdbInfo(traceEdbInfoResp data_manage.TraceEdbInfoResp, parentEdbInfoId int, edbInfoMap map[int]*data_manage.EdbInfo, edbMappingMap map[int][]*data_manage.EdbInfoCalculateMappingInfo) (newTraceEdbInfoResp data_manage.TraceEdbInfoResp, err error) {
+func handleTraceEdbInfo(traceEdbInfoResp data_manage.TraceEdbInfoResp, parentEdbInfoId int, edbInfoMap map[int]*data_manage.EdbInfo, edbMappingMap map[int][]*data_manage.EdbInfoCalculateMappingInfo, edbInfoIdPermissionMap map[int]bool) (newTraceEdbInfoResp data_manage.TraceEdbInfoResp, err error) {
 	edbInfo, ok := edbInfoMap[traceEdbInfoResp.EdbInfoId]
 	if !ok {
 		err = errors.New("指标异常")
@@ -2046,12 +2082,15 @@ func handleTraceEdbInfo(traceEdbInfoResp data_manage.TraceEdbInfoResp, parentEdb
 
 	if traceEdbInfoResp.Child != nil && len(traceEdbInfoResp.Child) > 0 {
 		for k, v := range traceEdbInfoResp.Child {
-			traceEdbInfoResp.Child[k], err = handleTraceEdbInfo(v, traceEdbInfoResp.EdbInfoId, edbInfoMap, edbMappingMap)
+			traceEdbInfoResp.Child[k], err = handleTraceEdbInfo(v, traceEdbInfoResp.EdbInfoId, edbInfoMap, edbMappingMap, edbInfoIdPermissionMap)
 			if err != nil {
 				return
 			}
 		}
 	}
+	// 指标权限
+	traceEdbInfoResp.HaveOperaAuth, _ = edbInfoIdPermissionMap[traceEdbInfoResp.EdbInfoId]
+
 	newTraceEdbInfoResp = traceEdbInfoResp
 
 	return