data_manage_permission.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package data_manage
  2. import (
  3. "eta/eta_api/utils"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "strconv"
  7. "time"
  8. )
  9. // SetDataIsPermissionReq
  10. // @Description: 设置数据分类权限请求
  11. type SetDataIsPermissionReq struct {
  12. Source int `description:"来源id"`
  13. SubSource int `description:"子来源id"`
  14. ClassifyIdList []int `description:"指标/图表/表格分类唯一id列表,如果为空,说明要给这些指标移除权限管控"`
  15. }
  16. // SetIsPermissionEdbChartByEdbClassifyIdList
  17. // @Description: 设置指标分类是否涉密
  18. // @author: Roc
  19. // @datetime 2024-03-27 14:15:42
  20. // @param classifyIdList []int
  21. func SetIsPermissionEdbChartByEdbClassifyIdList(classifyIdList []int) (err error) {
  22. num := len(classifyIdList)
  23. if num <= 0 {
  24. return
  25. }
  26. o, err := orm.NewOrmUsingDB("data").Begin()
  27. if err != nil {
  28. return
  29. }
  30. defer func() {
  31. if err != nil {
  32. _ = o.Rollback()
  33. } else {
  34. _ = o.Commit()
  35. }
  36. }()
  37. //// 获取已经配置涉密的分类权限
  38. //edbClassifyList := make([]*EdbClassify, 0)
  39. //sql := `SELECT * FROM edb_classify WHERE is_join_permission = ? `
  40. //_, err = o.Raw(sql, 1).QueryRows(&edbClassifyList)
  41. //if err != nil {
  42. // return
  43. //}
  44. //edbClassifyMap := make(map[int]*EdbClassify)
  45. //for _, v := range edbClassifyList {
  46. // edbClassifyMap[v.ClassifyId] = v
  47. //}
  48. // 分类不选的情况下,说明是要给这些分类移除权限管控
  49. if len(classifyIdList) <= 0 {
  50. // 将所有的分类设置为不涉密
  51. sql := `UPDATE edb_classify SET is_join_permission=?,modify_time=now() WHERE is_join_permission = 1 `
  52. _, err = o.Raw(sql, 0, 1).Exec()
  53. return
  54. } else {
  55. // 将对应的分类设置为涉密
  56. sql := `UPDATE edb_classify SET is_join_permission=?,modify_time=now() WHERE classify_id in (` + utils.GetOrmInReplace(num) + `) `
  57. _, err = o.Raw(sql, 1, classifyIdList).Exec()
  58. }
  59. // TODO 判断是否要记录移除的分类,用于发送通知给客户
  60. return
  61. }
  62. // SetPermissionEdbChartReq
  63. // @Description: 设置数据权限请求
  64. type SetPermissionEdbChartReq struct {
  65. Source int `description:"来源id"`
  66. SubSource int `description:"子来源id"`
  67. UserId int `description:"用户筛选"`
  68. DataIdList []string `description:"指标/图表唯一id列表"`
  69. NoDataIdList []string `description:"指标/图表唯一id列表"`
  70. UserList []int `description:"赋权用户id列表,如果为空,说明要给这些指标移除权限管控"`
  71. IsSelectAll bool `description:"是否选择所有指标"`
  72. ClassifyId string `description:"分类id,支持多选,用英文,隔开"`
  73. Keyword string `description:"关键字"`
  74. }
  75. // EdbInfoPermission
  76. // @Description: 指标权限表
  77. type EdbInfoPermission struct {
  78. PermissionId int64 `json:"permission_id" orm:"column(permission_id);pk"`
  79. EdbInfoId int32 `json:"edb_info_id"` // 指标id
  80. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  81. ModifyTime time.Time `json:"modify_time"` // 变更时间
  82. CreateTime time.Time `json:"create_time"` // 关系建立时间
  83. }
  84. // EdbClassifyPermission
  85. // @Description: 指标分类权限表
  86. type EdbClassifyPermission struct {
  87. PermissionId int64 `json:"permission_id" orm:"column(permission_id);pk"`
  88. EdbClassifyId int32 `json:"edb_classify_id"` // 分类id
  89. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  90. ModifyTime time.Time `json:"modify_time"` // 变更时间
  91. CreateTime time.Time `json:"create_time"` // 关系建立时间
  92. }
  93. // SetPermissionEdbChartByEdbIdList
  94. // @Description: 根据指标ID列表设置指标的用户权限
  95. // @author: Roc
  96. // @datetime 2024-03-27 14:03:42
  97. // @param edbIdList []string
  98. // @param userIdList []int
  99. // @return err error
  100. func SetPermissionEdbChartByEdbIdList(edbIdList []string, userIdList []int) (err error) {
  101. edbNum := len(edbIdList)
  102. if edbNum <= 0 {
  103. return
  104. }
  105. o, err := orm.NewOrmUsingDB("data").Begin()
  106. if err != nil {
  107. return
  108. }
  109. defer func() {
  110. if err != nil {
  111. _ = o.Rollback()
  112. } else {
  113. _ = o.Commit()
  114. }
  115. }()
  116. // 获取已经配置的指标权限用户
  117. edbInfoPermissionList := make([]*EdbInfoPermission, 0)
  118. sql := `SELECT * FROM edb_info_permission WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
  119. _, err = o.Raw(sql, edbIdList).QueryRows(&edbInfoPermissionList)
  120. if err != nil {
  121. return
  122. }
  123. edbInfoPermissionMap := make(map[string]*EdbInfoPermission)
  124. for _, v := range edbInfoPermissionList {
  125. edbInfoPermissionMap[fmt.Sprint(v.EdbInfoId, "_", v.SysUserId)] = v
  126. }
  127. // 用户不选的情况下,说明是要给这些指标移除权限管控
  128. if len(userIdList) <= 0 {
  129. // 标记指标为不纳入权限管控
  130. sql = `UPDATE edb_info SET is_join_permission=?,modify_time=now() WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
  131. _, err = o.Raw(sql, 0, edbIdList).Exec()
  132. return
  133. } else {
  134. // 标记指标为纳入权限管控
  135. sql = `UPDATE edb_info SET is_join_permission=?,modify_time=now() WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
  136. _, err = o.Raw(sql, 1, edbIdList).Exec()
  137. }
  138. // 待添加的配置项
  139. addList := make([]*EdbInfoPermission, 0)
  140. // 遍历待配置的指标和用户,筛选出需要添加的配置项
  141. for _, edbInfoIdStr := range edbIdList {
  142. edbInfoId, tmpErr := strconv.ParseInt(edbInfoIdStr, 10, 64)
  143. if tmpErr != nil {
  144. err = tmpErr
  145. return
  146. }
  147. for _, userId := range userIdList {
  148. key := fmt.Sprint(edbInfoId, "_", userId)
  149. if _, ok := edbInfoPermissionMap[key]; ok {
  150. // 如果存在那么就移除,说明不需要处理了
  151. delete(edbInfoPermissionMap, key)
  152. } else {
  153. // 如果不存在,那么就提那家
  154. addList = append(addList, &EdbInfoPermission{
  155. //PermissionId: 0,
  156. EdbInfoId: int32(edbInfoId),
  157. SysUserId: int32(userId),
  158. ModifyTime: time.Now(),
  159. CreateTime: time.Now(),
  160. })
  161. }
  162. }
  163. }
  164. // 添加待配置项
  165. if len(addList) > 0 {
  166. _, err = o.InsertMulti(500, addList)
  167. if err != nil {
  168. return
  169. }
  170. }
  171. // 移除废弃的配置项
  172. {
  173. // 获取移除的配置项
  174. deletePermissionIdList := make([]int64, 0)
  175. for _, v := range edbInfoPermissionMap {
  176. deletePermissionIdList = append(deletePermissionIdList, v.PermissionId)
  177. }
  178. deletePermissionIdNum := len(deletePermissionIdList)
  179. if deletePermissionIdNum > 0 {
  180. sql = "DELETE FROM edb_info_permission WHERE permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
  181. _, err = o.Raw(sql, deletePermissionIdList).Exec()
  182. if err != nil {
  183. return
  184. }
  185. }
  186. }
  187. return
  188. }
  189. // SetPermissionEdbChartClassifyIdByClassifyIdList
  190. // @Description: 根据指标分类ID列表设置分类的用户权限
  191. // @author: Roc
  192. // @datetime 2024-03-27 14:03:42
  193. // @param edbIdList []string
  194. // @param userIdList []int
  195. // @return err error
  196. func SetPermissionEdbChartClassifyIdByClassifyIdList(edbIdList []string, userIdList []int) (err error) {
  197. edbNum := len(edbIdList)
  198. if edbNum <= 0 {
  199. return
  200. }
  201. o, err := orm.NewOrmUsingDB("data").Begin()
  202. if err != nil {
  203. return
  204. }
  205. defer func() {
  206. if err != nil {
  207. _ = o.Rollback()
  208. } else {
  209. _ = o.Commit()
  210. }
  211. }()
  212. // 获取已经配置的指标权限用户
  213. edbInfoPermissionList := make([]*EdbInfoPermission, 0)
  214. sql := `SELECT * FROM edb_info_permission WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
  215. _, err = o.Raw(sql, edbIdList).QueryRows(&edbInfoPermissionList)
  216. if err != nil {
  217. return
  218. }
  219. edbInfoPermissionMap := make(map[string]*EdbInfoPermission)
  220. for _, v := range edbInfoPermissionList {
  221. edbInfoPermissionMap[fmt.Sprint(v.EdbInfoId, "_", v.SysUserId)] = v
  222. }
  223. // 用户不选的情况下,说明是要给这些指标移除权限管控
  224. if len(userIdList) <= 0 {
  225. // 标记指标为不纳入权限管控
  226. sql = `UPDATE edb_info SET is_join_permission=?,modify_time=now() WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
  227. _, err = o.Raw(sql, 0, edbIdList).Exec()
  228. return
  229. } else {
  230. // 标记指标为纳入权限管控
  231. sql = `UPDATE edb_info SET is_join_permission=?,modify_time=now() WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
  232. _, err = o.Raw(sql, 1, edbIdList).Exec()
  233. }
  234. // 待添加的配置项
  235. addList := make([]*EdbInfoPermission, 0)
  236. // 遍历待配置的指标和用户,筛选出需要添加的配置项
  237. for _, edbInfoIdStr := range edbIdList {
  238. edbInfoId, tmpErr := strconv.ParseInt(edbInfoIdStr, 10, 64)
  239. if tmpErr != nil {
  240. err = tmpErr
  241. return
  242. }
  243. for _, userId := range userIdList {
  244. key := fmt.Sprint(edbInfoId, "_", userId)
  245. if _, ok := edbInfoPermissionMap[key]; ok {
  246. // 如果存在那么就移除,说明不需要处理了
  247. delete(edbInfoPermissionMap, key)
  248. } else {
  249. // 如果不存在,那么就提那家
  250. addList = append(addList, &EdbInfoPermission{
  251. //PermissionId: 0,
  252. EdbInfoId: int32(edbInfoId),
  253. SysUserId: int32(userId),
  254. ModifyTime: time.Now(),
  255. CreateTime: time.Now(),
  256. })
  257. }
  258. }
  259. }
  260. // 添加待配置项
  261. if len(addList) > 0 {
  262. _, err = o.InsertMulti(500, addList)
  263. if err != nil {
  264. return
  265. }
  266. }
  267. // 移除废弃的配置项
  268. {
  269. // 获取移除的配置项
  270. deletePermissionIdList := make([]int64, 0)
  271. for _, v := range edbInfoPermissionMap {
  272. deletePermissionIdList = append(deletePermissionIdList, v.PermissionId)
  273. }
  274. deletePermissionIdNum := len(deletePermissionIdList)
  275. if deletePermissionIdNum > 0 {
  276. sql = "DELETE FROM edb_info_permission WHERE permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
  277. _, err = o.Raw(sql, deletePermissionIdList).Exec()
  278. if err != nil {
  279. return
  280. }
  281. }
  282. }
  283. return
  284. }