Browse Source

fix:分类权限继承

Roc 11 months ago
parent
commit
c773f1b4f1

+ 8 - 1
controllers/data_manage/chart_classify.go

@@ -378,12 +378,19 @@ func (this *ChartClassifyController) AddChartClassify() {
 	classify.Sort = maxSort + 1
 	classify.Source = utils.CHART_SOURCE_DEFAULT
 
-	_, err = data_manage.AddChartClassify(classify)
+	classifyId, err := data_manage.AddChartClassify(classify)
 	if err != nil {
 		br.Msg = "保存分类失败"
 		br.ErrMsg = "保存分类失败,Err:" + err.Error()
 		return
 	}
+	classify.ChartClassifyId = int(classifyId)
+
+	// 继承分类权限
+	{
+		go data_manage_permission.InheritParentClassify(5, utils.CHART_SOURCE_DEFAULT, classify.ChartClassifyId, classify.ParentId, classify.ChartClassifyName)
+	}
+
 	br.Ret = 200
 	br.Msg = "保存成功"
 	br.Success = true

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

@@ -272,6 +272,10 @@ func (this *ExcelClassifyController) AddExcelClassify() {
 		br.ErrMsg = "保存分类失败,Err:" + err.Error()
 		return
 	}
+	// 继承分类权限
+	{
+		go data_manage_permission.InheritParentClassify(6, source, classify.ExcelClassifyId, classify.ParentId, classify.ExcelClassifyName)
+	}
 	br.Ret = 200
 	br.Msg = "保存成功"
 	br.Success = true

+ 96 - 2
models/data_manage/data_manage_permission/chart.go

@@ -82,8 +82,6 @@ func SetIsPermissionByChartClassifyIdList(classifyIdList []int, chartClassifySou
 		}
 	}
 
-	// TODO 判断是否要记录移除的分类,用于发送通知给客户
-
 	return
 }
 
@@ -360,3 +358,99 @@ func GetPermissionChartClassifyIdList(userId, classifyId int) (idList []int, err
 
 	return
 }
+
+// InheritParentClassifyByChartClassifyId
+// @Description: 继承父级分类的图表权限信息
+// @author: Roc
+// @datetime 2024-04-07 21:02:51
+// @param dataSource int
+// @param chartSource int
+// @param classifyId int
+// @param parentClassifyId int
+// @param classifyName string
+// @param uniqueCode string
+// @return err error
+func InheritParentClassifyByChartClassifyId(dataSource, chartSource, classifyId, parentClassifyId int, classifyName, uniqueCode string) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 将对应的分类设置为涉密
+	sql := `UPDATE chart_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND chart_classify_id = ? `
+	_, err = o.Raw(sql, 1, chartSource, classifyId).Exec()
+	if err != nil {
+		return
+	}
+
+	// 添加未授权记录
+	{
+		// 获取父级未授权的用户记录
+		var parentRecordItems []*DataPermissionClassifyNoAuthRecord
+		sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE classify_id = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
+		_, err = o.Raw(sql, parentClassifyId, dataSource, chartSource).QueryRows(&parentRecordItems)
+
+		addNoAuthRecordItems := make([]*DataPermissionClassifyNoAuthRecord, 0)
+		for _, v := range parentRecordItems {
+			addNoAuthRecordItems = append(addNoAuthRecordItems, &DataPermissionClassifyNoAuthRecord{
+				DataPermissionClassifyNoAuthRecordId: 0,
+				Source:                               v.Source,
+				SubSource:                            v.SubSource,
+				OpUniqueCode:                         uniqueCode,
+				ClassifyId:                           fmt.Sprint(classifyId),
+				ClassifyName:                         classifyName,
+				SysUserId:                            v.SysUserId,
+				CreateTime:                           time.Now(),
+			})
+		}
+
+		// 添加待配置项
+		if len(addNoAuthRecordItems) > 0 {
+			_, err = o.InsertMulti(500, addNoAuthRecordItems)
+			if err != nil {
+				return
+			}
+		}
+
+	}
+
+	// 添加授权记录
+	{
+		// 获取父级分类已经授权的用户
+		parentClassifyPermissionList := make([]*ChartClassifyPermission, 0)
+		sql = `SELECT * FROM chart_classify_permission WHERE source = ? AND chart_classify_id = ? `
+		_, err = o.Raw(sql, chartSource, parentClassifyId).QueryRows(&parentClassifyPermissionList)
+		if err != nil {
+			return
+		}
+
+		addList := make([]*ChartClassifyPermission, 0)
+		for _, v := range parentClassifyPermissionList {
+			// 如果不存在,那么就提那家
+			addList = append(addList, &ChartClassifyPermission{
+				//PermissionId: 0,
+				ChartClassifyId: int32(classifyId),
+				Source:          int32(chartSource),
+				SysUserId:       v.SysUserId,
+				ModifyTime:      time.Now(),
+				CreateTime:      time.Now(),
+			})
+		}
+		// 添加待配置项
+		if len(addList) > 0 {
+			_, err = o.InsertMulti(500, addList)
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	return
+}

+ 2 - 2
models/data_manage/data_manage_permission/classify_no_auth_record.go

@@ -329,7 +329,7 @@ func DeleteClassifyNoAuthRecordBySourceAndClassifyIdList(source, subSource int)
 // @return total int
 // @return items []*DataPermissionClassifyNoAuthRecord
 // @return err error
-func GetDataPermissionClassifyNoAuthRecordListByUserId(userId int32, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionClassifyNoAuthRecord, err error) {
+func GetDataPermissionClassifyNoAuthRecordListByUserId(userId, source, subSource int32, startSize, pageSize int) (total int, items []*DataPermissionClassifyNoAuthRecord, err error) {
 	o := orm.NewOrmUsingDB("data")
 
 	// 获取总数
@@ -339,7 +339,7 @@ func GetDataPermissionClassifyNoAuthRecordListByUserId(userId int32, source, sub
 		return
 	}
 
-	sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE op_unique_code = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
+	sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE sys_user_id = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
 	_, err = o.Raw(sql, userId, source, subSource, startSize, pageSize).QueryRows(&items)
 
 	return

+ 96 - 2
models/data_manage/data_manage_permission/edb.go

@@ -80,8 +80,6 @@ func SetIsPermissionEdbChartByEdbClassifyIdList(classifyIdList []int, classifyTy
 		}
 	}
 
-	// TODO 判断是否要记录移除的分类,用于发送通知给客户
-
 	return
 }
 
@@ -358,3 +356,99 @@ func GetPermissionEdbClassifyIdList(userId, classifyId int) (idList []int, err e
 
 	return
 }
+
+// InheritParentClassifyByEdbClassifyId
+// @Description: 继承父级分类的指标权限信息
+// @author: Roc
+// @datetime 2024-04-07 21:02:51
+// @param source int
+// @param classifyType int
+// @param classifyId int
+// @param parentClassifyId int
+// @param classifyName string
+// @param uniqueCode string
+// @return err error
+func InheritParentClassifyByEdbClassifyId(source, classifyType, classifyId, parentClassifyId int, classifyName, uniqueCode string) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 将对应的分类设置为涉密
+	sql := `UPDATE edb_classify SET is_join_permission=?,modify_time=now() WHERE classify_type = ? AND classify_id = ? `
+	_, err = o.Raw(sql, 1, classifyType, classifyId).Exec()
+	if err != nil {
+		return
+	}
+
+	// 添加未授权记录
+	{
+		// 获取父级未授权的用户记录
+		var parentRecordItems []*DataPermissionClassifyNoAuthRecord
+		sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE classify_id = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
+		_, err = o.Raw(sql, parentClassifyId, source, classifyType).QueryRows(&parentRecordItems)
+
+		addNoAuthRecordItems := make([]*DataPermissionClassifyNoAuthRecord, 0)
+		for _, v := range parentRecordItems {
+			addNoAuthRecordItems = append(addNoAuthRecordItems, &DataPermissionClassifyNoAuthRecord{
+				DataPermissionClassifyNoAuthRecordId: 0,
+				Source:                               v.Source,
+				SubSource:                            v.SubSource,
+				OpUniqueCode:                         uniqueCode,
+				ClassifyId:                           fmt.Sprint(classifyId),
+				ClassifyName:                         classifyName,
+				SysUserId:                            v.SysUserId,
+				CreateTime:                           time.Now(),
+			})
+		}
+
+		// 添加待配置项
+		if len(addNoAuthRecordItems) > 0 {
+			_, err = o.InsertMulti(500, addNoAuthRecordItems)
+			if err != nil {
+				return
+			}
+		}
+
+	}
+
+	// 添加授权记录
+	{
+		// 获取父级分类已经授权的用户
+		parentClassifyPermissionList := make([]*EdbClassifyPermission, 0)
+		sql = `SELECT * FROM edb_classify_permission WHERE edb_classify_type = ? AND edb_classify_id = ? `
+		_, err = o.Raw(sql, classifyType, parentClassifyId).QueryRows(&parentClassifyPermissionList)
+		if err != nil {
+			return
+		}
+
+		addList := make([]*EdbClassifyPermission, 0)
+		for _, v := range parentClassifyPermissionList {
+			// 如果不存在,那么就提那家
+			addList = append(addList, &EdbClassifyPermission{
+				//PermissionId: 0,
+				EdbClassifyId:   int32(classifyId),
+				EdbClassifyType: int32(classifyType),
+				SysUserId:       v.SysUserId,
+				ModifyTime:      time.Now(),
+				CreateTime:      time.Now(),
+			})
+		}
+		// 添加待配置项
+		if len(addList) > 0 {
+			_, err = o.InsertMulti(500, addList)
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	return
+}

+ 96 - 2
models/data_manage/data_manage_permission/excel.go

@@ -78,8 +78,6 @@ func SetIsPermissionByExcelClassifyIdList(classifyIdList []int, excelClassifySou
 		}
 	}
 
-	// TODO 判断是否要记录移除的分类,用于发送通知给客户
-
 	return
 }
 
@@ -356,3 +354,99 @@ func GetPermissionExcelClassifyIdList(userId, classifyId int) (idList []int, err
 
 	return
 }
+
+// InheritParentClassifyByExcelClassifyId
+// @Description: 继承父级分类的ETA表格权限信息
+// @author: Roc
+// @datetime 2024-04-07 21:02:51
+// @param dataSource int
+// @param excelSource int
+// @param classifyId int
+// @param parentClassifyId int
+// @param classifyName string
+// @param uniqueCode string
+// @return err error
+func InheritParentClassifyByExcelClassifyId(dataSource, excelSource, classifyId, parentClassifyId int, classifyName, uniqueCode string) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 将对应的分类设置为涉密
+	sql := `UPDATE excel_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND excel_classify_id = ? `
+	_, err = o.Raw(sql, 1, excelSource, classifyId).Exec()
+	if err != nil {
+		return
+	}
+
+	// 添加未授权记录
+	{
+		// 获取父级未授权的用户记录
+		var parentRecordItems []*DataPermissionClassifyNoAuthRecord
+		sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE classify_id = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
+		_, err = o.Raw(sql, parentClassifyId, dataSource, excelSource).QueryRows(&parentRecordItems)
+
+		addNoAuthRecordItems := make([]*DataPermissionClassifyNoAuthRecord, 0)
+		for _, v := range parentRecordItems {
+			addNoAuthRecordItems = append(addNoAuthRecordItems, &DataPermissionClassifyNoAuthRecord{
+				DataPermissionClassifyNoAuthRecordId: 0,
+				Source:                               v.Source,
+				SubSource:                            v.SubSource,
+				OpUniqueCode:                         uniqueCode,
+				ClassifyId:                           fmt.Sprint(classifyId),
+				ClassifyName:                         classifyName,
+				SysUserId:                            v.SysUserId,
+				CreateTime:                           time.Now(),
+			})
+		}
+
+		// 添加待配置项
+		if len(addNoAuthRecordItems) > 0 {
+			_, err = o.InsertMulti(500, addNoAuthRecordItems)
+			if err != nil {
+				return
+			}
+		}
+
+	}
+
+	// 添加授权记录
+	{
+		// 获取父级分类已经授权的用户
+		parentClassifyPermissionList := make([]*ExcelClassifyPermission, 0)
+		sql = `SELECT * FROM excel_classify_permission WHERE source = ? AND excel_classify_id = ? `
+		_, err = o.Raw(sql, excelSource, parentClassifyId).QueryRows(&parentClassifyPermissionList)
+		if err != nil {
+			return
+		}
+
+		addList := make([]*ExcelClassifyPermission, 0)
+		for _, v := range parentClassifyPermissionList {
+			// 如果不存在,那么就提那家
+			addList = append(addList, &ExcelClassifyPermission{
+				//PermissionId: 0,
+				ExcelClassifyId: int32(classifyId),
+				Source:          int32(excelSource),
+				SysUserId:       v.SysUserId,
+				ModifyTime:      time.Now(),
+				CreateTime:      time.Now(),
+			})
+		}
+		// 添加待配置项
+		if len(addList) > 0 {
+			_, err = o.InsertMulti(500, addList)
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	return
+}

+ 2 - 2
models/data_manage/data_manage_permission/no_auth_record.go

@@ -195,7 +195,7 @@ func DeleteRecordBySourceAndDataIdList(source, subSource int, dataIdList []strin
 // @return total int
 // @return items []*DataPermissionNoAuthRecord
 // @return err error
-func GetDataPermissionNoAuthRecordListByUserId(userId int32, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionNoAuthRecord, err error) {
+func GetDataPermissionNoAuthRecordListByUserId(userId, source, subSource int32, startSize, pageSize int) (total int, items []*DataPermissionNoAuthRecord, err error) {
 	o := orm.NewOrmUsingDB("data")
 
 	// 获取总数
@@ -205,7 +205,7 @@ func GetDataPermissionNoAuthRecordListByUserId(userId int32, source, subSource,
 		return
 	}
 
-	sql = `SELECT * FROM data_permission_no_auth_record WHERE op_unique_code = ? AND source = ? AND sub_source = ? ORDER BY data_permission_no_auth_record_id desc LIMIT ?,? `
+	sql = `SELECT * FROM data_permission_no_auth_record WHERE sys_user_id = ? AND source = ? AND sub_source = ? ORDER BY data_permission_no_auth_record_id desc LIMIT ?,? `
 	_, err = o.Raw(sql, userId, source, subSource, startSize, pageSize).QueryRows(&items)
 
 	return

+ 84 - 0
services/data/data_manage_permission/edb_permission.go

@@ -519,3 +519,87 @@ func GetEdbChartIdListPermissionByDataId(source, subSource, dataId int) (idList
 	}
 	return
 }
+
+// InheritParentClassify
+// @Description: 继承父级分类的涉密权限
+// @author: Roc
+// @datetime 2024-04-07 21:09:16
+// @param source int
+// @param subSource int
+// @param classifyId int
+// @param parentClassifyId int
+// @param classifyName string
+func InheritParentClassify(source, subSource, classifyId, parentClassifyId int, classifyName string) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(fmt.Sprintf("继承父级分类失败:%s;source:%d;sub_source:%d;分类ID列表:%v", err.Error(), source, subSource, classifyId))
+			utils.FileLog.Error(fmt.Sprintf("继承父级分类失败:%s;source:%d;sub_source:%d;分类ID列表:%v", err.Error(), source, subSource, classifyId))
+		}
+	}()
+
+	// 一级分类不用继承
+	if parentClassifyId <= 0 {
+		return
+	}
+	uniqueCode := uuid.NewUUID().Hex32()
+	switch source {
+	case 3, 4:
+		//ETA指标库、ETA预测指标
+		// 分类信息
+		parentClassifyInfo, tmpErr := data_manage.GetEdbClassifyById(parentClassifyId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		// 没有标记涉密那么就忽略
+		if parentClassifyInfo.IsJoinPermission == 0 {
+			return
+		}
+
+		// 重新设置权限
+		classifyType := 0
+		if source == 4 {
+			classifyType = 1
+		}
+
+		err = data_manage_permission.InheritParentClassifyByEdbClassifyId(classifyId, parentClassifyId, source, classifyType, classifyName, uniqueCode)
+
+	case 5:
+		//图库
+		// 分类信息
+		parentClassifyInfo, tmpErr := data_manage.GetChartClassifyById(parentClassifyId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		// 没有标记涉密那么就忽略
+		if parentClassifyInfo.IsJoinPermission == 0 {
+			return
+		}
+
+		// 重新设置权限
+		chartClassifySource := utils.CHART_SOURCE_DEFAULT
+		err = data_manage_permission.InheritParentClassifyByChartClassifyId(classifyId, parentClassifyId, source, chartClassifySource, classifyName, uniqueCode)
+
+	case 6:
+		// ETA表格
+
+		// 分类信息
+		parentClassifyInfo, tmpErr := excel.GetExcelClassifyById(parentClassifyId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		// 没有标记涉密那么就忽略
+		if parentClassifyInfo.IsJoinPermission == 0 {
+			return
+		}
+
+		// 重新设置权限
+		err = data_manage_permission.InheritParentClassifyByExcelClassifyId(classifyId, parentClassifyId, source, subSource, classifyName, uniqueCode)
+
+	default:
+		return
+	}
+}

+ 2 - 2
services/data/data_manage_permission/message.go

@@ -43,7 +43,7 @@ func GetMessageDetail(messageInfo *data_manage_permission.DataPermissionMessage,
 		total = tmpTotal
 		resp, err = formatMessageDetailItemByDataPermissionMoveRecord(list)
 	case 3:
-		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionNoAuthRecordListByUserId(messageInfo.ReceiveUserId, source, subSource, startSize, pageSize)
+		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionNoAuthRecordListByUserId(messageInfo.ReceiveUserId, messageInfo.Source, messageInfo.SubSource, startSize, pageSize)
 		if tmpErr != nil {
 			err = tmpErr
 			return
@@ -51,7 +51,7 @@ func GetMessageDetail(messageInfo *data_manage_permission.DataPermissionMessage,
 		total = tmpTotal
 		resp, err = formatMessageDetailItemByDataPermissionNoAuthRecord(list)
 	case 4:
-		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionClassifyNoAuthRecordListByUserId(messageInfo.ReceiveUserId, source, subSource, startSize, pageSize)
+		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionClassifyNoAuthRecordListByUserId(messageInfo.ReceiveUserId, messageInfo.Source, messageInfo.SubSource, startSize, pageSize)
 		if tmpErr != nil {
 			err = tmpErr
 			return

+ 10 - 0
services/data/edb_classify.go

@@ -311,6 +311,16 @@ func AddEdbClassify(classifyName string, parentId, level int, classifyType uint8
 		errMsg = "保存分类失败"
 		return
 	}
+
+	// 继承分类权限
+	{
+		source := 3
+		if classifyType == 1 {
+			source = 4
+		}
+		go data_manage_permission.InheritParentClassify(source, int(classifyType), int(newId), classifyInfo.ParentId, classifyInfo.ClassifyName)
+	}
+
 	if parentId == 0 { //一级目录的rootId等于自己本身
 		classifyInfo.ClassifyId = int(newId)
 		classifyInfo.RootId = int(newId)