浏览代码

终端权限判断增加自营会员以及投资者支持

zhou.xiaoning 4 年之前
父节点
当前提交
f2c3689086
共有 1 个文件被更改,包括 54 次插入38 次删除
  1. 54 38
      models/common.go

+ 54 - 38
models/common.go

@@ -828,12 +828,20 @@ func GetErmcpRoleFuncMenuLists(loginID int, resourceCode string) ([]Funcmenulist
 
 	// 是否企业
 	isEnterprise := false
+	// 是否自营会员
+	isTrader := false
 	// 查询机构角色表
 	var arearole Arearole
 	arearoles, err := arearole.GetAreaRoles(int(userAccount.Userid))
 	if err != nil {
 		return nil, err
 	}
+	for _, v := range arearoles {
+		if v.Roletype == 6 {
+			isTrader = true
+			break
+		}
+	}
 	if len(arearoles) > 0 {
 		arearole = arearoles[0]
 		if arearole.Suborgtype == 0 {
@@ -841,53 +849,61 @@ func GetErmcpRoleFuncMenuLists(loginID int, resourceCode string) ([]Funcmenulist
 		}
 	}
 
-	// 判断是企业还是企业成员
-	if userAccount.Usertype == 2 && isEnterprise {
-		// UserType=2:企业。原逻辑:根据LoginAccount表"ClientRoleID"查询”ERMCP_MemberFuncMenu“表中该用户对应角色的菜单权限
-		sql := fmt.Sprintf(`select F.* from FUNCMENULIST F where F.MENUTYPE = 3 
+	if userAccount.Usertype == 5 || (userAccount.Usertype == 2 && isTrader) {
+		// 交易所,自营会员及投资者的权限不进行判断
+		if err := db.GetEngine().SQL("select F.* from FUNCMENULIST F where F.MENUTYPE = 4").Find(&funcMenuLists); err != nil {
+			return nil, err
+		}
+	} else {
+		// 判断是企业还是企业成员
+		// 账户类型 -  1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
+		if userAccount.Usertype == 2 && isEnterprise {
+			// UserType=2:企业。原逻辑:根据LoginAccount表"ClientRoleID"查询”ERMCP_MemberFuncMenu“表中该用户对应角色的菜单权限
+			sql := fmt.Sprintf(`select F.* from FUNCMENULIST F where F.MENUTYPE = 3 
 							and 
 							F.RESOURCECODE in 
 							(select R.RESOURCECODE from ERMCP_MEMBERFUNCMENU R 
 								where R.ISVALID = 1 and R.USERID = %d and R.ROLEID = %d)`, loginAccount.Userid, loginAccount.Clientroleid)
-		if len(resourceCode) != 0 {
-			sql += fmt.Sprintf(" and F.RESOURCECODE = '%s'", resourceCode)
-		}
-		if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
-			return nil, err
-		}
-	} else if userAccount.Usertype == 6 || userAccount.Usertype == 7 || (userAccount.Usertype == 2 && !isEnterprise) {
-		// UserType=7:企业成员
-		// 查询本用户的角色ID  - AreaRole表
-		// 根据 Rootuserid 和 自己的角色查询 ERMCP_MemberFuncMenu 表中的菜单权限
-		areaRoles := make([]Arearole, 0)
-		if err := db.GetEngine().Where("USERID = ?", loginAccount.Userid).Find(&areaRoles); err != nil {
-			return nil, err
-		}
-		if len(areaRoles) == 0 {
-			// 无角色,返回空数组s
-			return make([]Funcmenulist, 0), nil
-		}
-		// 构建RoleID列表
-		roleIDs := ""
-		for _, areaRole := range areaRoles {
-			roleIDs += "," + strconv.Itoa(int(areaRole.Roletype))
-		}
-		if len(roleIDs) > 0 {
-			roleIDs = roleIDs[1:]
-		}
-		sql := fmt.Sprintf(`select F.* from FUNCMENULIST F where F.MENUTYPE = 3 
+			if len(resourceCode) != 0 {
+				sql += fmt.Sprintf(" and F.RESOURCECODE = '%s'", resourceCode)
+			}
+			if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
+				return nil, err
+			}
+		} else if userAccount.Usertype == 6 || userAccount.Usertype == 7 || (userAccount.Usertype == 2 && !isEnterprise) {
+			// UserType=7:企业成员
+			// 查询本用户的角色ID  - AreaRole表
+			// 根据 Rootuserid 和 自己的角色查询 ERMCP_MemberFuncMenu 表中的菜单权限
+			areaRoles := make([]Arearole, 0)
+			if err := db.GetEngine().Where("USERID = ?", loginAccount.Userid).Find(&areaRoles); err != nil {
+				return nil, err
+			}
+			if len(areaRoles) == 0 {
+				// 无角色,返回空数组s
+				return make([]Funcmenulist, 0), nil
+			}
+			// 构建RoleID列表
+			roleIDs := ""
+			for _, areaRole := range areaRoles {
+				roleIDs += "," + strconv.Itoa(int(areaRole.Roletype))
+			}
+			if len(roleIDs) > 0 {
+				roleIDs = roleIDs[1:]
+			}
+			sql := fmt.Sprintf(`select F.* from FUNCMENULIST F where F.MENUTYPE = 3 
 							and 
 							F.RESOURCECODE in 
 							(select R.RESOURCECODE from ERMCP_MEMBERFUNCMENU R 
 								where R.ISVALID = 1 and R.USERID = %d and R.ROLEID in (%s))`, userAccount.Rootuserid, roleIDs)
-		if len(resourceCode) != 0 {
-			sql += fmt.Sprintf(" and F.RESOURCECODE = '%s'", resourceCode)
-		}
-		if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
-			return nil, err
+			if len(resourceCode) != 0 {
+				sql += fmt.Sprintf(" and F.RESOURCECODE = '%s'", resourceCode)
+			}
+			if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
+				return nil, err
+			}
+		} else {
+			return nil, errors.New("错误的用户类型")
 		}
-	} else {
-		return nil, errors.New("错误的用户类型")
 	}
 
 	return funcMenuLists, nil