Browse Source

fix:权限

Roc 11 months ago
parent
commit
0fcc44cee0

+ 17 - 0
controllers/data_manage/data_manage_permission.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/services/data"
 	"eta/eta_api/utils"
+	"fmt"
 )
 
 // DataMangePermissionController 数据权限管理
@@ -197,3 +198,19 @@ func (c *DataMangePermissionController) SetEdbChartClassifyPermission() {
 	br.Success = true
 	br.Msg = "设置成功"
 }
+func init() {
+	fmt.Println()
+
+	item, err := data_manage.GetEdbInfoById(100080)
+	if err != nil {
+		fmt.Println("GetEdbInfoById err:", err)
+		return
+	}
+	classifyItem, err := data_manage.GetEdbClassifyById(item.ClassifyId)
+	if err != nil {
+		fmt.Println("GetChartClassifyById err:", err)
+		return
+	}
+
+	fmt.Println(data.CheckEdbPermission(item.IsJoinPermission, classifyItem.IsJoinPermission, 142, item.EdbInfoId, item.ClassifyId))
+}

+ 18 - 1
controllers/data_manage/edb_info_calculate.go

@@ -241,8 +241,25 @@ func (this *ChartInfoController) CalculateDetail() {
 	fullEdb.EdbInfo = edbInfo
 	fullEdb.ClassifyList = classifyList
 
+	var currClassifyItem *data_manage.EdbClassifyIdItems
+	for _, v := range classifyList {
+		if v.ClassifyId == edbInfo.ClassifyId {
+			currClassifyItem = v
+		}
+	}
+	if currClassifyItem != nil {
+		haveOperaAuth, err := data.CheckEdbPermission(edbInfo.IsJoinPermission, currClassifyItem.IsJoinPermission, sysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = errMsg
+			return
+		}
+		fullEdb.HaveOperaAuth = haveOperaAuth
+	}
+	//HaveOperaAuth,err
+
 	// 拟合残差计算相关系数
-	if edbInfo.Source == utils.DATA_SOURCE_CALCULATE_NHCC {
+	if fullEdb.HaveOperaAuth && edbInfo.Source == utils.DATA_SOURCE_CALCULATE_NHCC {
 		var aEdbInfo, bEdbInfo *data_manage.EdbInfoCalculateDetail
 		for _, v := range calculateList {
 			if v.FromTag == "A" {

+ 42 - 0
models/data_manage/data_manage_permission.go

@@ -310,3 +310,45 @@ func SetPermissionEdbChartClassifyIdByClassifyIdList(classifyIdList []int, userI
 
 	return
 }
+
+// GetPermissionEdbIdList
+// @Description: 获取用户权限的指标列表
+// @author: Roc
+// @datetime 2024-03-28 16:50:47
+// @param userId int
+// @param edbInfoId int
+// @return idList []int
+// @return err error
+func GetPermissionEdbIdList(userId, edbInfoId int) (idList []int, err error) {
+	pars := []interface{}{userId}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT edb_info_id FROM edb_info_permission WHERE sys_user_id = ? `
+	if edbInfoId > 0 {
+		sql += ` AND edb_info_id = ? `
+		pars = append(pars, edbInfoId)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&idList)
+
+	return
+}
+
+// GetPermissionEdbClassifyIdList
+// @Description: 获取用户权限的指标分类列表
+// @author: Roc
+// @datetime 2024-03-28 16:50:47
+// @param userId int
+// @param classifyId int
+// @return idList []int
+// @return err error
+func GetPermissionEdbClassifyIdList(userId, classifyId int) (idList []int, err error) {
+	pars := []interface{}{userId}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT edb_classify_id FROM edb_classify_permission WHERE sys_user_id = ? `
+	if classifyId > 0 {
+		sql += ` AND edb_classify_id = ? `
+		pars = append(pars, classifyId)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&idList)
+
+	return
+}

+ 8 - 7
models/data_manage/edb_classify.go

@@ -203,13 +203,14 @@ type EdbClassifyItems struct {
 }
 
 type EdbClassifyIdItems struct {
-	ClassifyId    int `description:"分类id"`
-	ClassifyName  string
-	UniqueCode    string `description:"唯一编码"`
-	ParentId      int    `description:"父级分类id"`
-	Level         int    `description:"层级"`
-	RootId        int    `description:"顶级分类id"`
-	HaveOperaAuth bool   `description:"是否有该数据权限,默认:false"`
+	ClassifyId       int `description:"分类id"`
+	ClassifyName     string
+	UniqueCode       string `description:"唯一编码"`
+	ParentId         int    `description:"父级分类id"`
+	Level            int    `description:"层级"`
+	RootId           int    `description:"顶级分类id"`
+	IsJoinPermission int    `description:"是否加入权限管控,0:不加入;1:加入;默认:0" json:"-"`
+	HaveOperaAuth    bool   `description:"是否有该数据权限,默认:false"`
 }
 
 type EdbClassifyItemList []*EdbClassifyItems

+ 1 - 0
models/data_manage/edb_info.go

@@ -58,6 +58,7 @@ type EdbInfo struct {
 	IndicatorCode    string  `description:"指标代码"`
 	StockCode        string  `description:"证券代码"`
 	Extra            string  `description:"指标额外配置"`
+	IsJoinPermission int     `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 }
 
 type EdbInfoFullClassify struct {

+ 83 - 0
services/data/data_manage_permission.go

@@ -2,6 +2,8 @@ package data
 
 import (
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
+	"fmt"
 )
 
 // SetEdbChartPermission
@@ -203,3 +205,84 @@ func SetEdbChartClassifyPermission(source, subSource int, userList []int, classi
 
 	return
 }
+
+// GetUserEdbAndClassifyPermissionList
+// @Description: 根据用户获取已经授权指标ID列表和指标分类ID列表
+// @author: Roc
+// @datetime 2024-03-28 17:20:36
+// @param userId int
+// @param edbInfoId int 如果传递了edbInfoId,则只返回该edbInfoId的权限列表(其实也就是为了判断是否存在该指标权限了,目的是为了少获取数据)
+// @param classifyId int  classifyId,则只返回该classifyId的权限列表(其实也就是为了判断是否存在该指标分类权限了,目的是为了少获取数据)
+// @return edbIdList []int
+// @return classifyIdList []int
+// @return err error
+func GetUserEdbAndClassifyPermissionList(userId, edbInfoId, classifyId int) (edbIdList, classifyIdList []int, err error) {
+	edbIdList, err = data_manage.GetPermissionEdbIdList(userId, edbInfoId)
+	if err != nil {
+		fmt.Println("获取授权指标列表失败, err:", err)
+		return
+	}
+	classifyIdList, err = data_manage.GetPermissionEdbClassifyIdList(userId, classifyId)
+	if err != nil {
+		fmt.Println("获取授权指标分类列表失败, err:", err)
+		return
+	}
+
+	return
+}
+
+// CheckEdbPermission
+// @Description: 检查EDB指标(含预测指标)权限(方法内部自己获取所有的指标和指标分类权限,不用额外传递)
+// @author: Roc
+// @datetime 2024-03-28 16:12:08
+// @param edbIsJoinPermission int
+// @param edbClassifyIsJoinPermission int
+// @param edbInfoId int
+// @param edbClassifyId int
+// @return hasAuth bool
+func CheckEdbPermission(edbIsJoinPermission, edbClassifyIsJoinPermission, userId, edbInfoId, edbClassifyId int) (hasAuth bool, err error) {
+	edbIdList, classifyIdList, err := GetUserEdbAndClassifyPermissionList(userId, edbInfoId, edbClassifyId)
+	if err != nil {
+		fmt.Println("GetUserEdbAndClassifyPermissionList err:", err)
+		return
+	}
+
+	hasAuth = CheckEdbPermissionByPermissionIdList(edbIsJoinPermission, edbClassifyIsJoinPermission, edbInfoId, edbClassifyId, edbIdList, classifyIdList)
+
+	return
+}
+
+// CheckEdbPermissionByPermissionIdList
+// @Description: 检查EDB指标(含预测指标)权限
+// @author: Roc
+// @datetime 2024-03-28 16:12:08
+// @param edbIsJoinPermission int
+// @param edbClassifyIsJoinPermission int
+// @param edbInfoId int
+// @param edbClassifyId int
+// @param permissionEdbInfoIdList []int
+// @param permissionEdbClassifyIdList []int
+// @return hasAuth bool
+func CheckEdbPermissionByPermissionIdList(edbIsJoinPermission, edbClassifyIsJoinPermission, edbInfoId, edbClassifyId int, permissionEdbInfoIdList, permissionEdbClassifyIdList []int) (hasAuth bool) {
+	//hasAuth = true
+
+	// 判断 分类是否纳入权限管控
+	if edbClassifyIsJoinPermission == 1 {
+		// 不属于已授权的分类,那么就无权限
+		if !utils.InArrayByInt(permissionEdbClassifyIdList, edbClassifyId) {
+			return false
+		}
+	}
+
+	// 判断 指标是否纳入权限管控
+	if edbIsJoinPermission == 1 {
+		// 不属于已授权的指标,那么就无权限
+		if !utils.InArrayByInt(permissionEdbInfoIdList, edbInfoId) {
+			return false
+		}
+	}
+
+	hasAuth = true
+
+	return
+}

+ 4 - 0
services/data/edb_classify.go

@@ -85,6 +85,8 @@ func GetFullClassifyByClassifyId(targetClassifyId int) (targetList []*data_manag
 		targetItem.UniqueCode = targetClassify.UniqueCode
 		targetItem.Level = targetClassify.Level
 		targetItem.ClassifyName = targetClassify.ClassifyName
+		targetItem.ClassifyName = targetClassify.ClassifyName
+		targetItem.IsJoinPermission = targetClassify.IsJoinPermission
 		targetList = append(targetList, targetItem)
 		return
 	}
@@ -116,6 +118,7 @@ func GetFullClassifyByClassifyId(targetClassifyId int) (targetList []*data_manag
 				targetItem.UniqueCode = v.UniqueCode
 				targetItem.Level = v.Level
 				targetItem.ClassifyName = v.ClassifyName
+				targetItem.IsJoinPermission = v.IsJoinPermission
 				targetList = append(targetList, targetItem)
 			}
 		}
@@ -164,6 +167,7 @@ func GetChildClassifyByClassifyId(targetClassifyId int) (targetList []*data_mana
 				targetItem.UniqueCode = v.UniqueCode
 				targetItem.Level = v.Level
 				targetItem.ClassifyName = v.ClassifyName
+				targetItem.IsJoinPermission = v.IsJoinPermission
 				targetList = append(targetList, targetItem)
 			}
 		}