Browse Source

fix:单个资产授权

Roc 11 months ago
parent
commit
709950dd92

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

@@ -63,7 +63,7 @@ func (c *DataMangePermissionController) SetEdbChartPermission() {
 		return
 		return
 	}
 	}
 
 
-	err, errMsg := data_manage_permission.SetEdbChartPermission(req.Source, req.SubSource, req.UserId, req.UserList, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId)
+	err, errMsg := data_manage_permission.SetEdbChartPermission(req.Source, req.SubSource, req.UserId, req.UserList, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId, sysUser.AdminId)
 	if err != nil {
 	if err != nil {
 		//br.Success = true
 		//br.Success = true
 		br.Msg = "设置失败"
 		br.Msg = "设置失败"

+ 16 - 0
models/data_manage/data_manage_permission/classify_no_auth_record.go

@@ -0,0 +1,16 @@
+package data_manage_permission
+
+import "time"
+
+// DataPermissionClassifyNoAuthRecord
+// @Description: 资产分类数据权限未授权记录表
+type DataPermissionClassifyNoAuthRecord struct {
+	DataPermissionClassifyNoAuthRecordId int64     `json:"data_permission_classify_no_auth_record_id" orm:"column(data_permission_classify_no_auth_record_id);pk"` // 资产分类数据操作记录id
+	Source                               int32     `json:"source"`                                                                                                 // 数据来源,1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
+	SubSource                            int32     `json:"sub_source"`                                                                                             // 子来源 :ETA表格中的各种表格类型,以及图表的来源(这个是后续的扩展方向)
+	OpUniqueCode                         string    `json:"op_unique_code"`                                                                                         // 操作的唯一编码,主要是记录统一操作的日志
+	ClassifyId                           string    `json:"classify_id"`                                                                                            // 资产分类id(指标、图表、表格)
+	ClassifyName                         string    `json:"classify_name"`                                                                                          // 资产分类名称(指标、图表、表格)
+	SysUserId                            int32     `json:"sys_user_id"`                                                                                            // 系统用户id
+	CreateTime                           time.Time `json:"create_time"`                                                                                            // 创建时间
+}

+ 170 - 0
models/data_manage/data_manage_permission/no_auth_record.go

@@ -0,0 +1,170 @@
+package data_manage_permission
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// DataPermissionNoAuthRecord
+// @Description: 资产数据权限设置记录表
+type DataPermissionNoAuthRecord struct {
+	DataPermissionNoAuthRecordId int64     `json:"data_permission_no_auth_record_id" orm:"column(data_permission_no_auth_record_id);pk"` // 资产数据操作记录id
+	Source                       int32     `json:"source"`                                                                               // 数据来源,1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
+	SubSource                    int32     `json:"sub_source"`                                                                           // 子来源 :ETA表格中的各种表格类型,以及图表的来源(这个是后续的扩展方向)
+	OpUniqueCode                 string    `json:"op_unique_code"`                                                                       // 操作的唯一编码,主要是记录统一操作的日志
+	DataId                       string    `json:"data_id"`                                                                              // 资产id(指标、图表、表格)
+	DataCode                     string    `json:"data_code"`                                                                            // 资产code(指标、图表、表格)
+	DataName                     string    `json:"data_name"`                                                                            // 资产名称(指标、图表、表格)
+	SysUserId                    int32     `json:"sys_user_id"`                                                                          // 系统用户id
+	CreateTime                   time.Time `json:"create_time"`                                                                          // 创建时间
+}
+
+type DataItem struct {
+	DataId   string `json:"data_id"`   // 资产id(指标、图表、表格)
+	DataCode string `json:"data_code"` // 资产code(指标、图表、表格)
+	DataName string `json:"data_name"` // 资产名称(指标、图表、表格)
+}
+
+// AddRecordBySourceAndDataIdList
+// @Description: 添加记录
+// @author: Roc
+// @datetime 2024-04-07 15:25:49
+// @param source int
+// @param subSource int
+// @param dataIdList []string
+// @param dataList []DataItem
+// @param addUserIdList []int
+// @param uniqueCode
+// @param content string
+// @param opUserId int
+// @return err error
+func AddRecordBySourceAndDataIdList(source, subSource int, dataIdList []string, dataList []DataItem, addUserIdList []int, uniqueCode, content string, opUserId int) (err error) {
+	num := len(dataList)
+	if num <= 0 {
+		return
+	}
+	userNum := len(addUserIdList)
+	if userNum <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 根据指标获取已经存在的未授权记录
+	var existList []*DataPermissionNoAuthRecord
+	sql := `SELECT * FROM data_permission_no_auth_record WHERE source = ? AND sub_source = ? AND data_id in (` + utils.GetOrmInReplace(num) + `)`
+	_, err = o.Raw(sql, source, subSource, dataIdList).QueryRows(&existList)
+	if err != nil {
+		return
+	}
+
+	// 已经标记了的数据
+	existMap := make(map[int32]map[string]*DataPermissionNoAuthRecord)
+	for _, v := range existList {
+		tmpUserExistMap, ok := existMap[v.SysUserId]
+		if !ok {
+			tmpUserExistMap = make(map[string]*DataPermissionNoAuthRecord)
+		}
+
+		key := fmt.Sprint(v.Source, "_", v.SubSource, "_", v.DataId)
+		tmpUserExistMap[key] = v
+		existMap[v.SysUserId] = tmpUserExistMap
+	}
+
+	addMessageList := make([]*DataPermissionMessage, 0)
+	addRecordList := make([]*DataPermissionNoAuthRecord, 0)
+	for _, userId := range addUserIdList {
+		isAdd := false
+
+		tmpUserExistMap, userExistOk := existMap[int32(userId)]
+
+		for _, dataitem := range dataList {
+			// 判断是否已经存在,已经存在就过滤
+			if userExistOk {
+				key := fmt.Sprint(source, "_", subSource, "_", dataitem.DataId)
+				_, ok := tmpUserExistMap[key]
+				if ok {
+					continue
+				}
+			}
+
+			isAdd = true
+			addRecordList = append(addRecordList, &DataPermissionNoAuthRecord{
+				DataPermissionNoAuthRecordId: 0,
+				Source:                       int32(source),
+				SubSource:                    int32(subSource),
+				OpUniqueCode:                 uniqueCode,
+				DataId:                       dataitem.DataId,
+				DataCode:                     dataitem.DataCode,
+				DataName:                     dataitem.DataName,
+				SysUserId:                    int32(userId),
+				CreateTime:                   time.Now(),
+			})
+		}
+
+		if isAdd {
+			addMessageList = append(addMessageList, &DataPermissionMessage{
+				DataPermissionMessageId: 0,
+				SendUserId:              int32(opUserId),
+				ReceiveUserId:           int32(userId),
+				Content:                 content,
+				Remark:                  content,
+				OpType:                  1,
+				Source:                  int32(source),
+				SubSource:               int32(subSource),
+				OpUniqueCode:            uniqueCode,
+				IsRead:                  0,
+				CreateTime:              time.Now(),
+				ModifyTime:              time.Now(),
+			})
+		}
+	}
+
+	if len(addMessageList) > 0 {
+		_, err = o.InsertMulti(500, addMessageList)
+		if err != nil {
+			return
+		}
+	}
+
+	if len(addRecordList) > 0 {
+		_, err = o.InsertMulti(500, addRecordList)
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}
+
+// DeleteRecordBySourceAndDataIdList
+// @Description: 根据来源和数据id列表删除记录
+// @author: Roc
+// @datetime 2024-04-07 14:47:37
+// @param source int
+// @param subSource int
+// @param dataIdList []string
+// @return err error
+func DeleteRecordBySourceAndDataIdList(source, subSource int, dataIdList []string) (err error) {
+	num := len(dataIdList)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+
+	sql := `DELETE FROM data_permission_no_auth_record WHERE source = ? AND sub_source = ? AND data_id in (` + utils.GetOrmInReplace(num) + `)`
+	_, err = o.Raw(sql, source, subSource, dataIdList).Exec()
+
+	return
+}

+ 10 - 8
models/db.go

@@ -560,13 +560,15 @@ func initEdbRefresh() {
 // @datetime 2024-03-27 14:03:11
 // @datetime 2024-03-27 14:03:11
 func initDataMangePerMission() {
 func initDataMangePerMission() {
 	orm.RegisterModel(
 	orm.RegisterModel(
-		new(data_manage_permission.EdbInfoPermission),        // 指标权限表
-		new(data_manage_permission.EdbClassifyPermission),    // 指标分类权限表
-		new(data_manage_permission.ChartInfoPermission),      // 图表权限表
-		new(data_manage_permission.ChartClassifyPermission),  // 图表分类权限表
-		new(data_manage_permission.ExcelInfoPermission),      // ETA表格权限表
-		new(data_manage_permission.ExcelClassifyPermission),  // ETA表格分类权限表
-		new(data_manage_permission.DataPermissionMessage),    // 数据权限变更消息表
-		new(data_manage_permission.DataPermissionMoveRecord), // 数据资产转移记录表
+		new(data_manage_permission.EdbInfoPermission),                  // 指标权限表
+		new(data_manage_permission.EdbClassifyPermission),              // 指标分类权限表
+		new(data_manage_permission.ChartInfoPermission),                // 图表权限表
+		new(data_manage_permission.ChartClassifyPermission),            // 图表分类权限表
+		new(data_manage_permission.ExcelInfoPermission),                // ETA表格权限表
+		new(data_manage_permission.ExcelClassifyPermission),            // ETA表格分类权限表
+		new(data_manage_permission.DataPermissionMessage),              // 数据权限变更消息表
+		new(data_manage_permission.DataPermissionMoveRecord),           // 数据资产转移记录表
+		new(data_manage_permission.DataPermissionClassifyNoAuthRecord), // 资产分类数据权限未授权记录表
+		new(data_manage_permission.DataPermissionNoAuthRecord),         // 资产数据权限设置记录表
 	)
 	)
 }
 }

+ 123 - 34
services/data/data_manage_permission/edb_permission.go

@@ -1,8 +1,14 @@
 package data_manage_permission
 package data_manage_permission
 
 
 import (
 import (
+	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/data_manage_permission"
 	"eta/eta_api/models/data_manage/data_manage_permission"
+	"eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/models/system"
 	"eta/eta_api/utils"
 	"eta/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/uuid"
+	"strings"
 )
 )
 
 
 // SetEdbChartPermission
 // SetEdbChartPermission
@@ -18,11 +24,10 @@ import (
 // @param noDataId []string
 // @param noDataId []string
 // @param keyword string
 // @param keyword string
 // @param classify string
 // @param classify string
+// @param opUserId int 操作人
 // @return err error
 // @return err error
 // @return errMsg string
 // @return errMsg string
-func SetEdbChartPermission(source, subSource, userId int, userList []int, isSelectAll bool, dataIdList, noDataIdList []string, keyword, classify string) (err error, errMsg string) {
-	// TODO 消息通知
-
+func SetEdbChartPermission(source, subSource, userId int, userList []int, isSelectAll bool, dataIdList, noDataIdList []string, keyword, classify string, opUserId int) (err error, errMsg string) {
 	// 如果勾选全部数据,那么
 	// 如果勾选全部数据,那么
 	if isSelectAll {
 	if isSelectAll {
 		// 找出不要的指标ID列表
 		// 找出不要的指标ID列表
@@ -50,46 +55,130 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 		// 说明是取消权限管控
 		// 说明是取消权限管控
 	}
 	}
 
 
+	uniqueCode := uuid.NewUUID().Hex32()
+	content := `数据权限`
+	dataList := make([]data_manage_permission.DataItem, 0)
+
 	switch source {
 	switch source {
 	case 3, 4: //ETA指标库、ETA预测指标
 	case 3, 4: //ETA指标库、ETA预测指标
-		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
-		//if tmpErr != nil {
-		//	err = tmpErr
-		//	return
-		//}
-		//if len(tmpList) > 0 {
-		//}
-		// 重新设置权限
-		edbInfoType := 0
-		if source == 4 {
-			edbInfoType = 1
+		if source == 3 {
+			content += `(ETA指标库)`
+		} else {
+			content += `(ETA预测指标)`
+		}
+
+		tmpList, tmpErr := data_manage.GetEdbInfoListByEdbInfoId(dataIdList)
+		if tmpErr != nil {
+			err = tmpErr
+			return
 		}
 		}
-		err = data_manage_permission.SetPermissionByEdbIdList(dataIdList, userList, edbInfoType)
+		dataIdList = make([]string, 0)
+		if len(tmpList) > 0 {
+			for _, v := range tmpList {
+				dataList = append(dataList, data_manage_permission.DataItem{
+					DataId:   fmt.Sprint(v.EdbInfoId),
+					DataCode: v.EdbCode,
+					DataName: v.EdbName,
+				})
+				dataIdList = append(dataIdList, fmt.Sprint(v.EdbInfoId))
+			}
+			// 重新设置权限
+			edbInfoType := 0
+			if source == 4 {
+				edbInfoType = 1
+			}
+			err = data_manage_permission.SetPermissionByEdbIdList(dataIdList, userList, edbInfoType)
+		}
+
 	case 5: //图库
 	case 5: //图库
-		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
-		//if tmpErr != nil {
-		//	err = tmpErr
-		//	return
-		//}
-		//if len(tmpList) > 0 {
-		//}
-		// 重新设置权限
-		chartSource := utils.CHART_SOURCE_DEFAULT
-		err = data_manage_permission.SetPermissionByChartIdList(dataIdList, userList, chartSource)
+		content += `(ETA图库)`
+		tmpList, tmpErr := data_manage.GetChartInfoListByChartIdList(dataIdList)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if len(tmpList) > 0 {
+			dataIdList = make([]string, 0)
+			for _, v := range tmpList {
+				dataList = append(dataList, data_manage_permission.DataItem{
+					DataId:   fmt.Sprint(v.ChartInfoId),
+					DataCode: fmt.Sprint(v.ChartInfoId),
+					DataName: v.ChartName,
+				})
+				dataIdList = append(dataIdList, fmt.Sprint(v.ChartInfoId))
+			}
+
+			// 重新设置权限
+			chartSource := utils.CHART_SOURCE_DEFAULT
+			err = data_manage_permission.SetPermissionByChartIdList(dataIdList, userList, chartSource)
+		}
+
 	case 6: // ETA表格
 	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)
+		content += `(ETA表格)`
+		tmpList, tmpErr := excel.GetNoContentExcelListByExcelInfoIdList(dataIdList)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if len(tmpList) > 0 {
+			dataIdList = make([]string, 0)
+			for _, v := range tmpList {
+				dataList = append(dataList, data_manage_permission.DataItem{
+					DataId:   fmt.Sprint(v.ExcelInfoId),
+					DataCode: fmt.Sprint(v.ExcelInfoId),
+					DataName: v.ExcelName,
+				})
+				dataIdList = append(dataIdList, fmt.Sprint(v.ExcelInfoId))
+			}
+
+			// 重新设置权限
+			err = data_manage_permission.SetPermissionByExcelIdList(dataIdList, userList, subSource)
+		}
 	default:
 	default:
 		return
 		return
 	}
 	}
 
 
+	if err != nil {
+		return
+	}
+
+	var authRecordErr error
+	defer func() {
+		if authRecordErr != nil {
+			utils.FileLog.Error(fmt.Sprintf("记录未设置记录资产权限的记录失败:%s;source:%d;sub_source:%d;数据ID列表:%s;授权人列表:%v", authRecordErr.Error(), source, subSource, strings.Join(dataIdList, ","), userList))
+
+		}
+	}()
+
+	// 获取所有在用的用户
+	cond := ` AND enabled = 1`
+	pars := make([]interface{}, 0)
+
+	adminList, authRecordErr := system.GetSysAdminList(cond, pars, []string{}, "")
+	if authRecordErr != nil {
+		return
+	}
+
+	// 如果没有授权人,那么就删除未授权记录
+	if len(userList) < 0 {
+		authRecordErr = data_manage_permission.DeleteRecordBySourceAndDataIdList(source, subSource, dataIdList)
+		return
+	}
+
+	userIdMap := make(map[int]int)
+	for _, tmpUserId := range userIdMap {
+		userIdMap[tmpUserId] = tmpUserId
+	}
+
+	addUserIdList := make([]int, 0)
+	for _, v := range adminList {
+		if _, ok := userIdMap[v.AdminId]; !ok {
+			addUserIdList = append(addUserIdList, v.AdminId)
+		}
+	}
+
+	authRecordErr = data_manage_permission.AddRecordBySourceAndDataIdList(source, subSource, dataIdList, dataList, addUserIdList, uniqueCode, content, opUserId)
+
 	return
 	return
 }
 }