Forráskód Böngészése

fix:ETA表格数据权限校验

Roc 11 hónapja
szülő
commit
83f9916a0b

+ 18 - 2
controllers/data_manage/excel/custom_analysis.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/data_manage/excel/response"
 	"eta/eta_api/services"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"strconv"
@@ -66,6 +67,14 @@ func (c *CustomAnalysisController) ExcelByName() {
 		return
 	}
 
+	// 数据权限
+	haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelDetail.ExcelInfoId, excelDetail.ExcelClassifyId, excelDetail.IsJoinPermission, c.SysUser.AdminId)
+	if err != nil {
+		br.Msg = "获取ETA表格失败"
+		br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
+		return
+	}
+
 	resp.IsFind = true
 	resp.ExcelInfo = response.FindExcelInfo{
 		ExcelInfoId:     excelDetail.ExcelInfoId,
@@ -81,7 +90,7 @@ func (c *CustomAnalysisController) ExcelByName() {
 		Sort:            excelDetail.Sort,
 		ModifyTime:      excelDetail.ModifyTime,
 		CreateTime:      excelDetail.CreateTime,
-		Button:          excel.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source),
+		Button:          excel.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source, haveOperaAuth),
 	}
 
 	if excelDetail != nil {
@@ -402,6 +411,13 @@ func (c *CustomAnalysisController) BaseExcelDetail() {
 		return
 	}
 
+	// 数据权限
+	haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelDetail.ExcelInfoId, excelDetail.ExcelClassifyId, excelDetail.IsJoinPermission, c.SysUser.AdminId)
+	if err != nil {
+		br.Msg = "获取ETA表格失败"
+		br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
+		return
+	}
 
 	resp.IsFind = true
 	resp.ExcelInfo = response.FindExcelInfo{
@@ -418,7 +434,7 @@ func (c *CustomAnalysisController) BaseExcelDetail() {
 		Sort:            excelDetail.Sort,
 		ModifyTime:      excelDetail.ModifyTime,
 		CreateTime:      excelDetail.CreateTime,
-		Button:          excel.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source),
+		Button:          excel.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source, haveOperaAuth),
 	}
 	if markStatus.Status == 0 {
 		resp.ExcelInfo.CanEdit = true

+ 24 - 3
controllers/data_manage/excel/excel_classify.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel/request"
 	response2 "eta/eta_api/models/data_manage/excel/response"
+	"eta/eta_api/services/data/data_manage_permission"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"fmt"
@@ -51,6 +52,11 @@ func (this *ExcelClassifyController) List() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	// 分类map
+	classifyMap := make(map[int]*excel.ExcelClassifyItems)
+	for _, v := range classifyList {
+		classifyMap[v.ExcelClassifyId] = v
+	}
 
 	// 获取二级分类
 	// 获取三级分类
@@ -62,12 +68,27 @@ func (this *ExcelClassifyController) List() {
 		return
 	}
 
+	// 获取所有有权限的指标和分类
+	permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserExcelAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+		return
+	}
+
 	ExcelInfoMap := make(map[int][]*excel.ExcelClassifyItems)
 	for _, v := range allExcelInfo {
+		// 数据权限
+		if classifyInfo, ok := classifyMap[v.ExcelClassifyId]; ok {
+			v.HaveOperaAuth = data_manage_permission.CheckExcelPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.ExcelInfoId, v.ExcelClassifyId, permissionEdbIdList, permissionClassifyIdList)
+		}
+
 		ExcelInfoMap[v.ExcelClassifyId] = append(ExcelInfoMap[v.ExcelClassifyId], v)
 	}
-	classifyMap := make(map[int][]*excel.ExcelClassifyItems)
+	classifyListMap := make(map[int][]*excel.ExcelClassifyItems)
 	for _, v := range classifyList {
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckExcelClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ExcelClassifyId, permissionClassifyIdList)
 		if existItems, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
 			v.Children = existItems
 		}
@@ -75,12 +96,12 @@ func (this *ExcelClassifyController) List() {
 
 	for _, v := range classifyList {
 		if v.ParentId > 0 {
-			classifyMap[v.ParentId] = append(classifyMap[v.ParentId], v)
+			classifyListMap[v.ParentId] = append(classifyListMap[v.ParentId], v)
 		}
 	}
 	//组装三级分类
 	for key, classify := range classifyList {
-		subList, ok := classifyMap[classify.ExcelClassifyId]
+		subList, ok := classifyListMap[classify.ExcelClassifyId]
 		if ok {
 			classifyList[key].Children = append(classifyList[key].Children, subList...)
 			sort.Slice(classifyList[key].Children, func(i, j int) bool {

+ 52 - 7
controllers/data_manage/excel/excel_info.go

@@ -11,6 +11,7 @@ import (
 	"eta/eta_api/models/data_manage/excel/response"
 	"eta/eta_api/services"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/services/excel"
 	"eta/eta_api/utils"
@@ -397,9 +398,47 @@ func (c *ExcelInfoController) List() {
 		return
 	}
 
-	if list == nil || len(list) <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
+	lenList := len(list)
+	if list == nil || lenList <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
 		list = make([]*excel3.MyExcelInfoList, 0)
 	}
+
+	if lenList > 0 {
+		classifyIdList := make([]int, 0)
+		for _, v := range list {
+			classifyIdList = append(classifyIdList, v.ExcelClassifyId)
+		}
+		classifyMap := make(map[int]*excel3.ExcelClassify)
+
+		// 分类信息
+		{
+			classifyList, err := excel3.GetClassifyByIdList(classifyIdList)
+			if err != nil {
+				br.Msg = "获取表格列表信息失败"
+				br.ErrMsg = "获取表格分类列表数据失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range classifyList {
+				classifyMap[v.ExcelClassifyId] = v
+			}
+		}
+		// 获取所有有权限的指标和分类
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserExcelAndClassifyPermissionList(c.SysUser.AdminId, 0, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+			return
+		}
+
+		for _, v := range list {
+			// 数据权限
+			if classifyInfo, ok := classifyMap[v.ExcelClassifyId]; ok {
+				v.HaveOperaAuth = data_manage_permission.CheckExcelPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.ExcelInfoId, v.ExcelClassifyId, permissionEdbIdList, permissionClassifyIdList)
+			}
+		}
+
+	}
+
 	// 总数据量
 	dataCount, err := excel3.GetExcelListCountByCondition(condition, pars)
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -448,7 +487,7 @@ func (c *ExcelInfoController) Detail() {
 	}
 
 	// 获取数据详情
-	excelDetail, errMsg, err := excel2.GetExcelDetailInfoByExcelInfoId(excelInfoId)
+	excelDetail, errMsg, err := excel2.GetExcelDetailInfoByExcelInfoId(excelInfoId, c.SysUser.AdminId)
 	if err != nil {
 		br.Msg = errMsg
 		br.ErrMsg = err.Error()
@@ -469,7 +508,7 @@ func (c *ExcelInfoController) Detail() {
 	}
 
 	// excel表格按钮权限
-	excelDetail.Button = excel2.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source)
+	excelDetail.Button = excel2.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source, excelDetail.HaveOperaAuth)
 
 	br.Ret = 200
 	br.Success = true
@@ -601,7 +640,14 @@ func (c *ExcelInfoController) Edit() {
 
 	// 操作权限校验
 	{
-		button := excel2.GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source)
+		// 数据权限
+		haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelInfo.ExcelInfoId, excelInfo.ExcelClassifyId, excelInfo.IsJoinPermission, c.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取ETA表格失败"
+			br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
+			return
+		}
+		button := excel2.GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source, haveOperaAuth)
 		if !button.OpButton {
 			br.Msg = "无操作权限"
 			br.Msg = "无操作权限"
@@ -1877,7 +1923,7 @@ func (c *ExcelInfoController) Refresh() {
 	}
 
 	// 获取数据详情
-	excelDetail, errMsg, err := excel2.GetExcelDetailInfoByExcelInfoId(excelInfoId)
+	excelDetail, errMsg, err := excel2.GetExcelDetailInfoByExcelInfoId(excelInfoId, c.SysUser.AdminId)
 	if err != nil {
 		br.Msg = errMsg
 		br.ErrMsg = err.Error()
@@ -1886,9 +1932,8 @@ func (c *ExcelInfoController) Refresh() {
 
 	// 操作权限校验
 	{
-		button := excel2.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source)
+		button := excel2.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source, excelDetail.HaveOperaAuth)
 		if !button.RefreshButton {
-			br.Msg = "无操作权限"
 			br.Msg = "无操作权限"
 			br.IsSendEmail = false
 			return

+ 22 - 1
models/data_manage/excel/excel_classify.go

@@ -1,6 +1,7 @@
 package excel
 
 import (
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
@@ -96,7 +97,8 @@ type ExcelClassifyItems struct {
 	SysUserRealName   string `description:"创建人姓名"`
 	StartDate         string `description:"自定义开始日期"`
 	Children          []*ExcelClassifyItems
-	IsJoinPermission  int `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	IsJoinPermission  int  `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth     bool `description:"是否有数据权限"`
 }
 
 func GetExcelClassifyByCondition(condition string, pars []interface{}) (item *ExcelClassify, err error) {
@@ -172,3 +174,22 @@ func GetExcelClassifyViewById(classifyId int) (item *ExcelClassifyView, err erro
 func ExcelClassifyItemBySort(p1, p2 *ExcelClassifyItems) bool {
 	return p1.Sort < p2.Sort
 }
+
+// GetClassifyByIdList
+// @Description: 根据分类ID列表获取分类列表
+// @author: Roc
+// @datetime 2024-04-02 19:40:30
+// @param classifyIdList []int
+// @return items []*ExcelClassify
+// @return err error
+func GetClassifyByIdList(classifyIdList []int) (items []*ExcelClassify, err error) {
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM excel_classify WHERE excel_classify_id in (` + utils.GetOrmInReplace(num) + `) AND is_delete=0 `
+	_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
+
+	return
+}

+ 31 - 28
models/data_manage/excel/excel_info.go

@@ -9,21 +9,22 @@ import (
 
 // ExcelInfo excel表格详情表
 type ExcelInfo struct {
-	ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
-	Source          int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
-	ExcelType       int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
-	ExcelName       string    `description:"表格名称"`
-	UniqueCode      string    `description:"表格唯一编码"`
-	ExcelClassifyId int       `description:"表格分类id"`
-	SysUserId       int       `description:"操作人id"`
-	SysUserRealName string    `description:"操作人真实姓名"`
-	Content         string    `description:"表格内容"`
-	ExcelImage      string    `description:"表格图片"`
-	FileUrl         string    `description:"表格下载地址"`
-	Sort            int       `description:"排序字段,数字越小越排前面"`
-	IsDelete        int       `description:"是否删除,0:未删除,1:已删除"`
-	ModifyTime      time.Time `description:"最近修改日期"`
-	CreateTime      time.Time `description:"创建日期"`
+	ExcelInfoId      int       `orm:"column(excel_info_id);pk"`
+	Source           int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
+	ExcelType        int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelName        string    `description:"表格名称"`
+	UniqueCode       string    `description:"表格唯一编码"`
+	ExcelClassifyId  int       `description:"表格分类id"`
+	SysUserId        int       `description:"操作人id"`
+	SysUserRealName  string    `description:"操作人真实姓名"`
+	Content          string    `description:"表格内容"`
+	ExcelImage       string    `description:"表格图片"`
+	FileUrl          string    `description:"表格下载地址"`
+	Sort             int       `description:"排序字段,数字越小越排前面"`
+	IsDelete         int       `description:"是否删除,0:未删除,1:已删除"`
+	ModifyTime       time.Time `description:"最近修改日期"`
+	CreateTime       time.Time `description:"创建日期"`
+	IsJoinPermission int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 }
 
 // Update 更新 excel表格基础信息
@@ -34,19 +35,21 @@ func (excelInfo *ExcelInfo) Update(cols []string) (err error) {
 }
 
 type MyExcelInfoList struct {
-	ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
-	Source          int       `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
-	ExcelType       int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
-	ExcelName       string    `description:"表格名称"`
-	UniqueCode      string    `description:"表格唯一编码"`
-	ExcelClassifyId int       `description:"表格分类id"`
-	SysUserId       int       `description:"操作人id"`
-	SysUserRealName string    `description:"操作人真实姓名"`
-	ExcelImage      string    `description:"表格图片"`
-	FileUrl         string    `description:"表格下载地址"`
-	Sort            int       `description:"排序字段,数字越小越排前面"`
-	ModifyTime      time.Time `description:"最近修改日期"`
-	CreateTime      time.Time `description:"创建日期"`
+	ExcelInfoId      int       `orm:"column(excel_info_id);pk"`
+	Source           int       `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
+	ExcelType        int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelName        string    `description:"表格名称"`
+	UniqueCode       string    `description:"表格唯一编码"`
+	ExcelClassifyId  int       `description:"表格分类id"`
+	SysUserId        int       `description:"操作人id"`
+	SysUserRealName  string    `description:"操作人真实姓名"`
+	ExcelImage       string    `description:"表格图片"`
+	FileUrl          string    `description:"表格下载地址"`
+	Sort             int       `description:"排序字段,数字越小越排前面"`
+	ModifyTime       time.Time `description:"最近修改日期"`
+	CreateTime       time.Time `description:"创建日期"`
+	IsJoinPermission int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth    bool      `description:"是否有数据权限"`
 }
 
 // AddExcelInfo 新增表格

+ 21 - 19
models/data_manage/excel/response/excel_info.go

@@ -56,25 +56,27 @@ type TableDetailResp struct {
 
 // ExcelInfoDetail excel表格详情(前端使用)
 type ExcelInfoDetail struct {
-	ExcelInfoId     int                   `orm:"column(excel_info_id);pk"`
-	Source          int                   `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
-	ExcelType       int                   `description:"表格类型,1:指标列,2:日期列,默认:1"`
-	ExcelName       string                `description:"表格名称"`
-	UniqueCode      string                `description:"表格唯一编码"`
-	ExcelClassifyId int                   `description:"表格分类id"`
-	SysUserId       int                   `description:"操作人id"`
-	SysUserRealName string                `description:"操作人真实姓名"`
-	Content         string                `description:"表格内容"`
-	ExcelImage      string                `description:"表格图片"`
-	FileUrl         string                `description:"表格下载地址"`
-	Sort            int                   `description:"排序字段,数字越小越排前面"`
-	IsDelete        int                   `description:"是否删除,0:未删除,1:已删除"`
-	ModifyTime      time.Time             `description:"最近修改日期"`
-	CreateTime      time.Time             `description:"创建日期"`
-	TableData       interface{}           `description:"表格内容"`
-	Button          ExcelInfoDetailButton `description:"操作权限"`
-	CanEdit         bool                  `description:"是否可编辑"`
-	Editor          string                `description:"编辑人"`
+	ExcelInfoId      int                   `orm:"column(excel_info_id);pk"`
+	Source           int                   `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
+	ExcelType        int                   `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelName        string                `description:"表格名称"`
+	UniqueCode       string                `description:"表格唯一编码"`
+	ExcelClassifyId  int                   `description:"表格分类id"`
+	SysUserId        int                   `description:"操作人id"`
+	SysUserRealName  string                `description:"操作人真实姓名"`
+	Content          string                `description:"表格内容"`
+	ExcelImage       string                `description:"表格图片"`
+	FileUrl          string                `description:"表格下载地址"`
+	Sort             int                   `description:"排序字段,数字越小越排前面"`
+	IsDelete         int                   `description:"是否删除,0:未删除,1:已删除"`
+	ModifyTime       time.Time             `description:"最近修改日期"`
+	CreateTime       time.Time             `description:"创建日期"`
+	TableData        interface{}           `description:"表格内容"`
+	Button           ExcelInfoDetailButton `description:"操作权限"`
+	CanEdit          bool                  `description:"是否可编辑"`
+	Editor           string                `description:"编辑人"`
+	IsJoinPermission int                   `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth    bool                  `description:"是否有数据权限"`
 }
 
 // ExcelInfoDetailButton 操作按钮

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

@@ -128,7 +128,8 @@ func GetEdbChartClassifyList(source, subSource int) (resp data_manage.EdbChartCl
 	//if utils.Re == nil {
 	//	utils.Rc.Delete(key)
 	//}
-	case 6: // ETA表格
+	case 6:
+		// ETA表格
 		// 考虑到后面可以会迭代到10层, 这里直接用递归处理
 		classifyAll, e := excel.GetExcelClassifyBySourceOrderByLevel(subSource)
 		if e != nil && e.Error() != utils.ErrNoRow() {

+ 23 - 69
services/data/data_manage_permission/edb_permission.go

@@ -76,23 +76,16 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 		// 重新设置权限
 		chartSource := utils.CHART_SOURCE_DEFAULT
 		err = data_manage_permission.SetPermissionByChartIdList(dataIdList, userList, chartSource)
-	//case 6: // ETA表格
-	//	tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
-	//	if tmpErr != nil {
-	//		err = tmpErr
-	//		return
-	//	}
-	//	if len(tmpList) > 0 {
-	//		for _, v := range tmpList {
-	//			if v.SysUserId == newUserId {
-	//				errMsg = "新创建人不可和原创建人一致"
-	//				err = errors.New(errMsg)
-	//				return
-	//			}
-	//		}
-	//		// 修改创建人
-	//		err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-	//	}
+	case 6: // ETA表格
+		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
+		//if tmpErr != nil {
+		//	err = tmpErr
+		//	return
+		//}
+		//if len(tmpList) > 0 {
+		//}
+		// 重新设置权限
+		err = data_manage_permission.SetPermissionByExcelIdList(dataIdList, userList, subSource)
 	default:
 		return
 	}
@@ -133,7 +126,10 @@ func SetDataIsPermission(source, subSource int, classifyIdList []int) (err error
 		chartClassifySource := utils.CHART_SOURCE_DEFAULT
 		err = data_manage_permission.SetIsPermissionByChartClassifyIdList(classifyIdList, chartClassifySource)
 
-	//case 6: // ETA表格
+	case 6:
+		// ETA表格
+		// 重新设置权限
+		err = data_manage_permission.SetIsPermissionByExcelClassifyIdList(classifyIdList, subSource)
 
 	default:
 		return
@@ -186,23 +182,9 @@ func SetEdbChartClassifyPermission(source, subSource int, userList []int, classi
 		// 重新设置权限
 		chartClassifySource := utils.CHART_SOURCE_DEFAULT
 		err = data_manage_permission.SetPermissionByChartClassifyIdList(classifyIdList, userList, chartClassifySource)
-	//case 6: // ETA表格
-	//	tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
-	//	if tmpErr != nil {
-	//		err = tmpErr
-	//		return
-	//	}
-	//	if len(tmpList) > 0 {
-	//		for _, v := range tmpList {
-	//			if v.SysUserId == newUserId {
-	//				errMsg = "新创建人不可和原创建人一致"
-	//				err = errors.New(errMsg)
-	//				return
-	//			}
-	//		}
-	//		// 修改创建人
-	//		err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-	//	}
+	case 6:
+		// ETA表格
+		err = data_manage_permission.SetPermissionByExcelClassifyIdList(classifyIdList, userList, subSource)
 	default:
 		return
 	}
@@ -239,23 +221,9 @@ func GetEdbChartClassifyIdListPermissionByUserId(source, subSource, userId int)
 		//图库
 		chartClassifySource := utils.CHART_SOURCE_DEFAULT
 		idList, err = data_manage_permission.GetPermissionChartClassifyIdListByUserId(userId, chartClassifySource)
-	//case 6: // ETA表格
-	//	tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
-	//	if tmpErr != nil {
-	//		err = tmpErr
-	//		return
-	//	}
-	//	if len(tmpList) > 0 {
-	//		for _, v := range tmpList {
-	//			if v.SysUserId == newUserId {
-	//				errMsg = "新创建人不可和原创建人一致"
-	//				err = errors.New(errMsg)
-	//				return
-	//			}
-	//		}
-	//		// 修改创建人
-	//		err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-	//	}
+	case 6:
+		// ETA表格
+		idList, err = data_manage_permission.GetPermissionExcelClassifyIdListByUserId(userId, subSource)
 	default:
 		return
 	}
@@ -290,23 +258,9 @@ func GetEdbChartIdListPermissionByDataId(source, subSource, dataId int) (idList
 		//图库
 		chartClassifySource := utils.CHART_SOURCE_DEFAULT
 		idList, err = data_manage_permission.GetPermissionChartIdListByDataId(dataId, chartClassifySource)
-	//case 6: // ETA表格
-	//	tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
-	//	if tmpErr != nil {
-	//		err = tmpErr
-	//		return
-	//	}
-	//	if len(tmpList) > 0 {
-	//		for _, v := range tmpList {
-	//			if v.SysUserId == newUserId {
-	//				errMsg = "新创建人不可和原创建人一致"
-	//				err = errors.New(errMsg)
-	//				return
-	//			}
-	//		}
-	//		// 修改创建人
-	//		err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-	//	}
+	case 6:
+		// ETA表格
+		idList, err = data_manage_permission.GetPermissionExcelIdListByDataId(dataId, subSource)
 	default:
 		return
 	}

+ 155 - 0
services/data/data_manage_permission/excel.go

@@ -0,0 +1,155 @@
+package data_manage_permission
+
+import (
+	"eta/eta_api/models/data_manage/data_manage_permission"
+	"eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/utils"
+	"fmt"
+)
+
+// CheckExcelPermissionByPermissionIdList
+// @Description: 检查ETA图库(只包含ETA图库,不包含统计分析等模块)权限
+// @author: Roc
+// @datetime 2024-03-28 16:12:08
+// @param excelIsJoinPermission int
+// @param excelClassifyIsJoinPermission int
+// @param excelInfoId int
+// @param excelClassifyId int
+// @param permissionExcelInfoIdList []int
+// @param permissionExcelClassifyIdList []int
+// @return hasAuth bool
+func CheckExcelPermissionByPermissionIdList(excelIsJoinPermission, excelClassifyIsJoinPermission, excelInfoId, excelClassifyId int, permissionExcelInfoIdList, permissionExcelClassifyIdList []int) (hasAuth bool) {
+	//hasAuth = true
+
+	// 判断 分类是否纳入权限管控
+	if excelClassifyIsJoinPermission == 1 {
+		// 不属于已授权的分类,那么就无权限
+		if !utils.InArrayByInt(permissionExcelClassifyIdList, excelClassifyId) {
+			return false
+		}
+	}
+
+	// 判断 指标是否纳入权限管控
+	if excelIsJoinPermission == 1 {
+		// 不属于已授权的指标,那么就无权限
+		if !utils.InArrayByInt(permissionExcelInfoIdList, excelInfoId) {
+			return false
+		}
+	}
+
+	hasAuth = true
+
+	return
+}
+
+// CheckExcelClassifyPermissionByPermissionIdList
+// @Description: 检查EDB分类权限
+// @author: Roc
+// @datetime 2024-03-29 14:35:19
+// @param excelClassifyIsJoinPermission int
+// @param excelClassifyId int
+// @param permissionExcelClassifyIdList []int
+// @return hasAuth bool
+func CheckExcelClassifyPermissionByPermissionIdList(excelClassifyIsJoinPermission, excelClassifyId int, permissionExcelClassifyIdList []int) (hasAuth bool) {
+	// 判断 分类是否纳入权限管控
+	if excelClassifyIsJoinPermission == 1 {
+		// 不属于已授权的分类,那么就无权限
+		if !utils.InArrayByInt(permissionExcelClassifyIdList, excelClassifyId) {
+			return
+		}
+	}
+
+	hasAuth = true
+
+	return
+}
+
+// GetUserExcelAndClassifyPermissionList
+// @Description: 根据用户获取已经授权指标ID列表和指标分类ID列表
+// @author: Roc
+// @datetime 2024-03-28 17:20:36
+// @param userId int
+// @param excelInfoId int 如果传递了excelInfoId,则只返回该excelInfoId的权限列表(其实也就是为了判断是否存在该指标权限了,目的是为了少获取数据)
+// @param classifyId int  classifyId,则只返回该classifyId的权限列表(其实也就是为了判断是否存在该指标分类权限了,目的是为了少获取数据)
+// @return excelIdList []int
+// @return classifyIdList []int
+// @return err error
+func GetUserExcelAndClassifyPermissionList(userId, excelInfoId, classifyId int) (excelIdList, classifyIdList []int, err error) {
+	// 获取有权限的指标ID列表
+	excelIdList, err = data_manage_permission.GetPermissionExcelIdList(userId, excelInfoId)
+	if err != nil {
+		fmt.Println("获取授权指标列表失败, err:", err)
+		return
+	}
+
+	// 获取有权限的指标分类ID列表
+	classifyIdList, err = data_manage_permission.GetPermissionExcelClassifyIdList(userId, classifyId)
+	if err != nil {
+		fmt.Println("获取授权指标分类列表失败, err:", err)
+		return
+	}
+
+	return
+}
+
+// GetUserExcelClassifyPermissionList
+// @Description: 根据用户获取已经授权指标分类ID列表
+// @author: Roc
+// @datetime 2024-03-28 17:20:36
+// @param userId int
+// @param classifyId int  classifyId,则只返回该classifyId的权限列表(其实也就是为了判断是否存在该指标分类权限了,目的是为了少获取数据)
+// @return classifyIdList []int
+// @return err error
+func GetUserExcelClassifyPermissionList(userId, classifyId int) (classifyIdList []int, err error) {
+	// 获取有权限的指标分类ID列表
+	classifyIdList, err = data_manage_permission.GetPermissionExcelClassifyIdList(userId, classifyId)
+	if err != nil {
+		fmt.Println("获取授权指标分类列表失败, err:", err)
+		return
+	}
+
+	return
+}
+
+// CheckExcelPermissionByExcelInfoId
+// @Description: 根据指标id和指标分类id,检查EDB指标(含预测指标)权限(方法内部自己获取所有的指标和指标分类权限,不用额外传递)
+// @author: Roc
+// @datetime 2024-03-29 13:28:06
+// @param excelInfoId int
+// @param excelClassifyId int
+// @param excelIsJoinPermission int
+// @param userId int
+// @return hasAuth bool
+// @return err error
+func CheckExcelPermissionByExcelInfoId(excelInfoId, excelClassifyId, excelIsJoinPermission, userId int) (hasAuth bool, err error) {
+	currClassify, err := excel.GetExcelClassifyById(excelClassifyId)
+	if err != nil {
+		return
+	}
+	if currClassify != nil {
+		return CheckExcelPermission(excelIsJoinPermission, currClassify.IsJoinPermission, userId, excelInfoId, excelClassifyId)
+	}
+
+	return
+}
+
+// CheckExcelPermission
+// @Description: 检查EDB指标(含预测指标)权限(方法内部自己获取所有的指标和指标分类权限,不用额外传递)
+// @author: Roc
+// @datetime 2024-03-28 16:12:08
+// @param excelIsJoinPermission int
+// @param excelClassifyIsJoinPermission int
+// @param excelInfoId int
+// @param excelClassifyId int
+// @return hasAuth bool
+func CheckExcelPermission(excelIsJoinPermission, excelClassifyIsJoinPermission, userId, excelInfoId, excelClassifyId int) (hasAuth bool, err error) {
+	excelIdList, classifyIdList, err := GetUserExcelAndClassifyPermissionList(userId, excelInfoId, excelClassifyId)
+	if err != nil {
+		fmt.Println("GetUserExcelAndClassifyPermissionList err:", err)
+		return
+	}
+
+	hasAuth = CheckExcelPermissionByPermissionIdList(excelIsJoinPermission, excelClassifyIsJoinPermission, excelInfoId, excelClassifyId, excelIdList, classifyIdList)
+
+	return
+}

+ 14 - 2
services/data/excel/excel_info.go

@@ -9,6 +9,7 @@ import (
 	"eta/eta_api/models/data_manage/excel/response"
 	"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/shopspring/decimal"
@@ -20,7 +21,7 @@ import (
 )
 
 // GetExcelDetailInfoByExcelInfoId 根据表格id获取表格详情
-func GetExcelDetailInfoByExcelInfoId(excelInfoId int) (excelDetail response.ExcelInfoDetail, errMsg string, err error) {
+func GetExcelDetailInfoByExcelInfoId(excelInfoId, sysUserId int) (excelDetail response.ExcelInfoDetail, errMsg string, err error) {
 	errMsg = `获取失败`
 	//获取eta表格信息
 	excelInfo, err := excel.GetExcelInfoById(excelInfoId)
@@ -33,6 +34,13 @@ func GetExcelDetailInfoByExcelInfoId(excelInfoId int) (excelDetail response.Exce
 		return
 	}
 
+	// 数据权限
+	excelDetail.HaveOperaAuth, err = data_manage_permission.CheckExcelPermissionByExcelInfoId(excelDetail.ExcelInfoId, excelDetail.ExcelClassifyId, excelDetail.IsJoinPermission, sysUserId)
+	if err != nil {
+		err = errors.New("获取表格权限信息失败,Err" + err.Error())
+		return
+	}
+
 	return formatExcelInfo2Detail(excelInfo)
 }
 
@@ -110,7 +118,11 @@ func formatExcelInfo2Detail(excelInfo *excel.ExcelInfo) (excelDetail response.Ex
 }
 
 // GetExcelInfoOpButton 获取ETA表格的操作权限
-func GetExcelInfoOpButton(sysUser *system.Admin, belongUserId, source int) (button response.ExcelInfoDetailButton) {
+func GetExcelInfoOpButton(sysUser *system.Admin, belongUserId, source int, haveOperaAuth bool) (button response.ExcelInfoDetailButton) {
+	// 如果没有数据权限,那么直接返回
+	if !haveOperaAuth {
+		return
+	}
 	//非管理员角色查看其他用户创建的表格,可刷新、另存为、下载表格;
 	button.RefreshButton = true
 	button.CopyButton = true

+ 19 - 2
services/data/excel/excel_op.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/models/system"
 	"eta/eta_api/services"
 	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data/data_manage_permission"
 	excel "eta/eta_api/services/excel"
 	"eta/eta_api/utils"
 	"fmt"
@@ -20,7 +21,15 @@ func Delete(excelInfo *excelModel.ExcelInfo, sysUser *system.Admin) (err error,
 
 	// 操作权限校验
 	{
-		button := GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source)
+		// 数据权限
+		haveOperaAuth, tmpErr := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelInfo.ExcelInfoId, excelInfo.ExcelClassifyId, excelInfo.IsJoinPermission, sysUser.AdminId)
+		if err != nil {
+			errMsg = "获取ETA表格权限失败"
+			err = errors.New("获取ETA表格权限失败,Err:" + tmpErr.Error())
+			return
+		}
+
+		button := GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source, haveOperaAuth)
 		if !button.DeleteButton {
 			errMsg = "无操作权限"
 			err = errors.New(errMsg)
@@ -87,7 +96,15 @@ func Copy(oldExcelInfoId, excelClassifyId int, excelName string, sysUser *system
 
 	// 操作权限校验
 	{
-		button := GetExcelInfoOpButton(sysUser, oldExcelInfo.SysUserId, oldExcelInfo.Source)
+		// 数据权限
+		haveOperaAuth, tmpErr := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelInfo.ExcelInfoId, excelInfo.ExcelClassifyId, excelInfo.IsJoinPermission, sysUser.AdminId)
+		if err != nil {
+			errMsg = "获取ETA表格权限失败"
+			err = errors.New("获取ETA表格权限失败,Err:" + tmpErr.Error())
+			return
+		}
+
+		button := GetExcelInfoOpButton(sysUser, oldExcelInfo.SysUserId, oldExcelInfo.Source, haveOperaAuth)
 		if !button.CopyButton {
 			errMsg = "无操作权限"
 			err = errors.New(errMsg)