瀏覽代碼

Merge remote-tracking branch 'origin/eta/1.7.6' into debug

Roc 1 年之前
父節點
當前提交
c7bd0d52cd

+ 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

+ 357 - 0
models/data_manage/data_manage_permission/excel.go

@@ -0,0 +1,357 @@
+package data_manage_permission
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strconv"
+	"time"
+)
+
+type ExcelInfoPermission struct {
+	ExcelInfoPermissionId int64     `json:"excel_info_permission_id" orm:"column(excel_info_permission_id);pk"`
+	ExcelInfoId           int32     `json:"excel_info_id"` // ETA表格id
+	Source                int32     `json:"source"`        // 表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1
+	SysUserId             int32     `json:"sys_user_id"`   // 系统用户id
+	ModifyTime            time.Time `json:"modify_time"`   // 变更时间
+	CreateTime            time.Time `json:"create_time"`   // 关系建立时间
+}
+
+type ExcelClassifyPermission struct {
+	ExcelClassifyPermissionId int64     `json:"excel_classify_permission_id" orm:"column(excel_classify_permission_id);pk"`
+	ExcelClassifyId           int32     `json:"excel_classify_id"` // 分类id
+	Source                    int32     `json:"source"`            // 表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1
+	SysUserId                 int32     `json:"sys_user_id"`       // 系统用户id
+	ModifyTime                time.Time `json:"modify_time"`       // 变更时间
+	CreateTime                time.Time `json:"create_time"`       // 关系建立时间
+}
+
+// SetIsPermissionByExcelClassifyIdList
+// @Description: 设置表格分类是否涉密
+// @author: Roc
+// @datetime 2024-04-01 10:53:23
+// @param classifyIdList []int
+// @param excelClassifySource int
+// @return err error
+func SetIsPermissionByExcelClassifyIdList(classifyIdList []int, excelClassifySource int) (err error) {
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	//// 获取已经配置涉密的分类权限
+	//excelClassifyList := make([]*ExcelClassify, 0)
+	//sql := `SELECT * FROM excel_classify WHERE is_join_permission = ? `
+	//_, err = o.Raw(sql, 1).QueryRows(&excelClassifyList)
+	//if err != nil {
+	//	return
+	//}
+	//excelClassifyMap := make(map[int]*ExcelClassify)
+	//for _, v := range excelClassifyList {
+	//	excelClassifyMap[v.ClassifyId] = v
+	//}
+
+	// 先将所有已经设置了涉密的分类设置为不涉密
+	sql := `UPDATE excel_classify SET is_join_permission=?,modify_time=now() WHERE is_join_permission = 1 AND source = ?`
+	_, err = o.Raw(sql, 0, excelClassifySource).Exec()
+	if err != nil {
+		return
+	}
+
+	if len(classifyIdList) > 0 {
+		// 将对应的分类设置为涉密
+		sql = `UPDATE excel_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND excel_classify_id in (` + utils.GetOrmInReplace(num) + `) `
+		_, err = o.Raw(sql, 1, excelClassifySource, classifyIdList).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	// TODO 判断是否要记录移除的分类,用于发送通知给客户
+
+	return
+}
+
+// SetPermissionByExcelIdList
+// @Description: 根据表格ID列表设置表格的用户权限
+// @author: Roc
+// @datetime 2024-04-01 10:26:17
+// @param excelIdList []string
+// @param userIdList []int
+// @param source int
+// @return err error
+func SetPermissionByExcelIdList(excelIdList []string, userIdList []int, source int) (err error) {
+	excelNum := len(excelIdList)
+	if excelNum <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 获取已经配置的表格权限用户
+	excelInfoPermissionList := make([]*ExcelInfoPermission, 0)
+	sql := `SELECT * FROM excel_info_permission WHERE source = ? AND excel_info_id in (` + utils.GetOrmInReplace(excelNum) + `) `
+	_, err = o.Raw(sql, source, excelIdList).QueryRows(&excelInfoPermissionList)
+	if err != nil {
+		return
+	}
+	excelInfoPermissionMap := make(map[string]*ExcelInfoPermission)
+	for _, v := range excelInfoPermissionList {
+		excelInfoPermissionMap[fmt.Sprint(v.ExcelInfoId, "_", v.SysUserId)] = v
+	}
+
+	// 标记表格是否纳入权限管控
+	{
+		// 默认 标记表格为纳入权限管控
+		isJoinPermission := 1
+		// 用户不选的情况下,说明是要给这些表格移除权限管控
+		if len(userIdList) <= 0 {
+			// 标记表格为不纳入权限管控
+			isJoinPermission = 0
+		}
+		sql = `UPDATE excel_info SET is_join_permission=?,modify_time=now() WHERE source = ? AND excel_info_id in (` + utils.GetOrmInReplace(excelNum) + `) `
+		_, err = o.Raw(sql, isJoinPermission, source, excelIdList).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	// 待添加的配置项
+	addList := make([]*ExcelInfoPermission, 0)
+
+	// 遍历待配置的表格和用户,筛选出需要添加的配置项
+	for _, excelInfoIdStr := range excelIdList {
+		excelInfoId, tmpErr := strconv.ParseInt(excelInfoIdStr, 10, 64)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, userId := range userIdList {
+			key := fmt.Sprint(excelInfoId, "_", userId)
+			if _, ok := excelInfoPermissionMap[key]; ok {
+				// 如果存在那么就移除,说明不需要处理了
+				delete(excelInfoPermissionMap, key)
+			} else {
+				// 如果不存在,那么就提那家
+				addList = append(addList, &ExcelInfoPermission{
+					//PermissionId: 0,
+					ExcelInfoId: int32(excelInfoId),
+					SysUserId:   int32(userId),
+					ModifyTime:  time.Now(),
+					CreateTime:  time.Now(),
+				})
+			}
+		}
+	}
+
+	// 添加待配置项
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(500, addList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 移除废弃的配置项
+	{
+		// 待移除的配置项
+		deletePermissionIdList := make([]int64, 0)
+		for _, v := range excelInfoPermissionMap {
+			deletePermissionIdList = append(deletePermissionIdList, v.ExcelInfoPermissionId)
+		}
+
+		deletePermissionIdNum := len(deletePermissionIdList)
+		if deletePermissionIdNum > 0 {
+			sql = "DELETE FROM excel_info_permission WHERE excel_info_permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
+			_, err = o.Raw(sql, deletePermissionIdList).Exec()
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	return
+}
+
+// SetPermissionByExcelClassifyIdList
+// @Description: 根据表格分类ID列表设置分类的用户权限
+// @author: Roc
+// @datetime 2024-03-28 14:53:04
+// @param classifyIdList []int
+// @param userIdList []int
+// @return err error
+func SetPermissionByExcelClassifyIdList(classifyIdList []int, userIdList []int, classifyType int) (err error) {
+	userNum := len(userIdList)
+	if userNum <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 获取当前选择用户已经配置的表格分类权限
+	classifyPermissionList := make([]*ExcelClassifyPermission, 0)
+	sql := `SELECT * FROM excel_classify_permission WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(userNum) + `) `
+	_, err = o.Raw(sql, classifyType, userIdList).QueryRows(&classifyPermissionList)
+	if err != nil {
+		return
+	}
+	classifyPermissionMap := make(map[string]*ExcelClassifyPermission)
+	for _, v := range classifyPermissionList {
+		classifyPermissionMap[fmt.Sprint(v.ExcelClassifyId, "_", v.SysUserId)] = v
+	}
+
+	// 待添加的配置项
+	addList := make([]*ExcelClassifyPermission, 0)
+
+	// 遍历待配置的表格和用户,筛选出需要添加的配置项
+	for _, userId := range userIdList {
+		for _, classifyId := range classifyIdList {
+			key := fmt.Sprint(classifyId, "_", userId)
+			if _, ok := classifyPermissionMap[key]; ok {
+				// 如果存在那么就移除,说明不需要处理了
+				delete(classifyPermissionMap, key)
+			} else {
+				// 如果不存在,那么就提那家
+				addList = append(addList, &ExcelClassifyPermission{
+					//PermissionId: 0,
+					ExcelClassifyId: int32(classifyId),
+					Source:          int32(classifyType),
+					SysUserId:       int32(userId),
+					ModifyTime:      time.Now(),
+					CreateTime:      time.Now(),
+				})
+			}
+		}
+	}
+
+	// 添加待配置项
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(500, addList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 移除废弃的配置项
+	{
+		// 获取移除的配置项
+		deletePermissionIdList := make([]int64, 0)
+		for _, v := range classifyPermissionMap {
+			deletePermissionIdList = append(deletePermissionIdList, v.ExcelClassifyPermissionId)
+		}
+
+		deletePermissionIdNum := len(deletePermissionIdList)
+		if deletePermissionIdNum > 0 {
+			sql = "DELETE FROM excel_classify_permission WHERE excel_classify_permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
+			_, err = o.Raw(sql, deletePermissionIdList).Exec()
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	return
+}
+
+// GetPermissionExcelClassifyIdListByUserId
+// @Description: 根据用户ID获取已经配置的分类id列表
+// @author: Roc
+// @datetime 2024-03-29 16:24:46
+// @param userId int
+// @param classifyType int
+// @return excelClassifyIdList []int
+// @return err error
+func GetPermissionExcelClassifyIdListByUserId(userId int, classifyType int) (excelClassifyIdList []int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT excel_classify_id FROM excel_classify_permission WHERE source = ? AND sys_user_id = ? `
+	_, err = o.Raw(sql, classifyType, userId).QueryRows(&excelClassifyIdList)
+
+	return
+}
+
+// GetPermissionExcelIdListByDataId
+// @Description: 根据资产(表格、表格、表格)ID获取已经配置的用户id列表
+// @author: Roc
+// @datetime 2024-03-29 16:24:46
+// @param dataId int
+// @param source int
+// @return excelIdList []int
+// @return err error
+func GetPermissionExcelIdListByDataId(dataId int, source int) (excelIdList []int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT sys_user_id FROM excel_info_permission WHERE source = ? AND excel_info_id= ? `
+	_, err = o.Raw(sql, source, dataId).QueryRows(&excelIdList)
+
+	return
+}
+
+// GetPermissionExcelIdList
+// @Description: 获取用户权限的表格列表
+// @author: Roc
+// @datetime 2024-03-28 16:50:47
+// @param userId int
+// @param excelInfoId int
+// @return idList []int
+// @return err error
+func GetPermissionExcelIdList(userId, excelInfoId int) (idList []int, err error) {
+	pars := []interface{}{userId}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT excel_info_id FROM excel_info_permission WHERE sys_user_id = ? `
+	if excelInfoId > 0 {
+		sql += ` AND excel_info_id = ? `
+		pars = append(pars, excelInfoId)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&idList)
+
+	return
+}
+
+// GetPermissionExcelClassifyIdList
+// @Description: 获取用户权限的表格分类列表
+// @author: Roc
+// @datetime 2024-03-28 16:50:47
+// @param userId int
+// @param classifyId int
+// @return idList []int
+// @return err error
+func GetPermissionExcelClassifyIdList(userId, classifyId int) (idList []int, err error) {
+	pars := []interface{}{userId}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT excel_classify_id FROM excel_classify_permission WHERE sys_user_id = ? `
+	if classifyId > 0 {
+		sql += ` AND excel_classify_id = ? `
+		pars = append(pars, classifyId)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&idList)
+
+	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)