sys_authority.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package service
  2. import (
  3. "errors"
  4. "gin-vue-admin/global"
  5. "gin-vue-admin/model"
  6. "gin-vue-admin/model/request"
  7. "gin-vue-admin/model/response"
  8. "gorm.io/gorm"
  9. "strconv"
  10. )
  11. // @title CreateAuthority
  12. // @description 创建一个角色
  13. // @auth (2020/04/05 20:22)
  14. // @param auth model.SysAuthority
  15. // @return error
  16. // @return authority model.SysAuthority
  17. func CreateAuthority(auth model.SysAuthority) (err error, authority model.SysAuthority) {
  18. var authorityBox model.SysAuthority
  19. notHas := errors.Is(global.GVA_DB.Where("authority_id = ?", auth.AuthorityId).First(&authorityBox).Error, gorm.ErrRecordNotFound)
  20. if !notHas {
  21. return errors.New("存在相同角色id"), auth
  22. }
  23. err = global.GVA_DB.Create(&auth).Error
  24. return err, auth
  25. }
  26. // @title CopyAuthority
  27. // @description 复制一个角色
  28. // @auth (2020/04/05 20:22)
  29. // @param copyInfo response.SysAuthorityCopyResponse
  30. // @return error
  31. // @return authority model.SysAuthority
  32. func CopyAuthority(copyInfo response.SysAuthorityCopyResponse) (err error, authority model.SysAuthority) {
  33. var authorityBox model.SysAuthority
  34. notHas := errors.Is(global.GVA_DB.Where("authority_id = ?", copyInfo.Authority.AuthorityId).First(&authorityBox).Error, gorm.ErrRecordNotFound)
  35. if !notHas {
  36. return errors.New("存在相同角色id"), authority
  37. }
  38. copyInfo.Authority.Children = []model.SysAuthority{}
  39. err, menus := GetMenuAuthority(copyInfo.OldAuthorityId)
  40. var baseMenu []model.SysBaseMenu
  41. for _, v := range menus {
  42. intNum, _ := strconv.Atoi(v.MenuId)
  43. v.SysBaseMenu.ID = uint(intNum)
  44. baseMenu = append(baseMenu, v.SysBaseMenu)
  45. }
  46. copyInfo.Authority.SysBaseMenus = baseMenu
  47. err = global.GVA_DB.Create(&copyInfo.Authority).Error
  48. paths := GetPolicyPathByAuthorityId(copyInfo.OldAuthorityId)
  49. err = UpdateCasbin(copyInfo.Authority.AuthorityId, paths)
  50. if err != nil {
  51. _ = DeleteAuthority(&copyInfo.Authority)
  52. }
  53. return err, copyInfo.Authority
  54. }
  55. // @title UpdateAuthority
  56. // @description 更改一个角色
  57. // @auth (2020/04/05 20:22)
  58. // @param auth model.SysAuthority
  59. // @return error
  60. // @return authority model.SysAuthority
  61. func UpdateAuthority(auth model.SysAuthority) (err error, authority model.SysAuthority) {
  62. err = global.GVA_DB.Where("authority_id = ?", auth.AuthorityId).First(&model.SysAuthority{}).Updates(&auth).Error
  63. return err, auth
  64. }
  65. // @title DeleteAuthority
  66. // @description 删除角色
  67. // @auth (2020/04/05 20:22)
  68. // @param auth model.SysAuthority
  69. // @return error
  70. // 删除角色
  71. func DeleteAuthority(auth *model.SysAuthority) (err error) {
  72. notHas := errors.Is(global.GVA_DB.Where("authority_id = ?", auth.AuthorityId).First(&model.SysUser{}).Error, gorm.ErrRecordNotFound)
  73. if !notHas {
  74. return errors.New("此角色有用户正在使用禁止删除")
  75. }
  76. notHas = errors.Is(global.GVA_DB.Where("parent_id = ?", auth.AuthorityId).First(&model.SysAuthority{}).Error, gorm.ErrRecordNotFound)
  77. if !notHas {
  78. return errors.New("此角色存在子角色不允许删除")
  79. }
  80. db := global.GVA_DB.Preload("SysBaseMenus").Where("authority_id = ?", auth.AuthorityId).First(auth).Unscoped().Delete(auth)
  81. if len(auth.SysBaseMenus) > 0 {
  82. err = db.Association("SysBaseMenus").Delete(auth.SysBaseMenus)
  83. } else {
  84. err = db.Error
  85. }
  86. ClearCasbin(0, auth.AuthorityId)
  87. return err
  88. }
  89. // @title GetInfoList
  90. // @description 删除文件切片记录
  91. // @auth (2020/04/05 20:22)
  92. // @param info request.PaveInfo
  93. // @return error
  94. // 分页获取数据
  95. func GetAuthorityInfoList(info request.PageInfo) (err error, list interface{}, total int64) {
  96. limit := info.PageSize
  97. offset := info.PageSize * (info.Page - 1)
  98. db := global.GVA_DB
  99. var authority []model.SysAuthority
  100. err = db.Limit(limit).Offset(offset).Preload("DataAuthorityId").Where("parent_id = 0").Find(&authority).Error
  101. if len(authority) > 0 {
  102. for k := range authority {
  103. err = findChildrenAuthority(&authority[k])
  104. }
  105. }
  106. return err, authority, total
  107. }
  108. // @title GetAuthorityInfo
  109. // @description 获取所有角色信息
  110. // @auth (2020/04/05 20:22)
  111. // @param auth model.SysAuthority
  112. // @return error
  113. // @param authority model.SysAuthority
  114. func GetAuthorityInfo(auth model.SysAuthority) (err error, sa model.SysAuthority) {
  115. err = global.GVA_DB.Preload("DataAuthorityId").Where("authority_id = ?", auth.AuthorityId).First(&sa).Error
  116. return err, sa
  117. }
  118. // @title SetDataAuthority
  119. // @description 设置角色资源权限
  120. // @auth (2020/04/05 20:22)
  121. // @param auth model.SysAuthority
  122. // @return error
  123. func SetDataAuthority(auth model.SysAuthority) error {
  124. var s model.SysAuthority
  125. global.GVA_DB.Preload("DataAuthorityId").First(&s, "authority_id = ?", auth.AuthorityId)
  126. err := global.GVA_DB.Model(&s).Association("DataAuthorityId").Replace(&auth.DataAuthorityId)
  127. return err
  128. }
  129. // @title SetMenuAuthority
  130. // @description 菜单与角色绑定
  131. // @auth (2020/04/05 20:22)
  132. // @param auth *model.SysAuthority
  133. // @return error
  134. func SetMenuAuthority(auth *model.SysAuthority) error {
  135. var s model.SysAuthority
  136. global.GVA_DB.Preload("SysBaseMenus").First(&s, "authority_id = ?", auth.AuthorityId)
  137. err := global.GVA_DB.Model(&s).Association("SysBaseMenus").Replace(&auth.SysBaseMenus)
  138. return err
  139. }
  140. // @title findChildrenAuthority
  141. // @description 查询子角色
  142. // @auth (2020/04/05 20:22)
  143. // @param auth *model.SysAuthority
  144. // @return error
  145. func findChildrenAuthority(authority *model.SysAuthority) (err error) {
  146. err = global.GVA_DB.Preload("DataAuthorityId").Where("parent_id = ?", authority.AuthorityId).Find(&authority.Children).Error
  147. if len(authority.Children) > 0 {
  148. for k := range authority.Children {
  149. err = findChildrenAuthority(&authority.Children[k])
  150. }
  151. }
  152. return err
  153. }