roleService.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package service
  2. import (
  3. "iot_manager_service/app/system/dao"
  4. "iot_manager_service/app/system/model"
  5. "iot_manager_service/util"
  6. "strconv"
  7. )
  8. // 角色管理服务
  9. var RoleService = new(roleService)
  10. type roleService struct{}
  11. func (s *roleService) Get(id int64) (*dao.Role, error) {
  12. role := &dao.Role{
  13. ID: id,
  14. }
  15. err := role.Get()
  16. if err != nil {
  17. return nil, err
  18. }
  19. return role, nil
  20. }
  21. func (s *roleService) List(roleName, tenantId, roleAlias string, current, size int) ([]dao.Role, error) {
  22. role := &dao.Role{}
  23. offset := (current - 1) * size
  24. limit := size
  25. if roleName != "" {
  26. role.RoleName = roleName
  27. }
  28. if tenantId != "" {
  29. role.TenantId = tenantId
  30. }
  31. if roleAlias != "" {
  32. role.RoleAlias = roleAlias
  33. }
  34. roles, err := role.GetRoles(offset, limit)
  35. if err != nil {
  36. return nil, err
  37. }
  38. return roles, nil
  39. }
  40. func (s *roleService) Tree() (*model.RspRoleTree, error) {
  41. role := &dao.Role{}
  42. roles, err := role.GetAll()
  43. if err != nil {
  44. return nil, err
  45. }
  46. rsp := &model.RspRoleTree{}
  47. //上级角色——多个下级角色数组
  48. tmp := make(map[int64][]dao.Role)
  49. for _, role := range roles {
  50. childes, isExist := tmp[role.ParentId]
  51. if isExist {
  52. childes = append(childes, role)
  53. tmp[role.ParentId] = childes
  54. } else {
  55. tmp[role.ParentId] = []dao.Role{role}
  56. }
  57. }
  58. if len(tmp) == 0 {
  59. return nil, nil
  60. }
  61. roots, _ := tmp[0]
  62. rsp.RoleDetails = dfs(rsp.RoleDetails, roots, tmp)
  63. return rsp, nil
  64. }
  65. func dfs(result []model.RoleDetail, roles []dao.Role, tmp map[int64][]dao.Role) []model.RoleDetail {
  66. if len(roles) == 0 {
  67. return nil
  68. }
  69. for _, child := range roles {
  70. id := strconv.FormatInt(child.ID, 10)
  71. parentId := strconv.FormatInt(child.ParentId, 10)
  72. detail := model.RoleDetail{
  73. ID: id,
  74. ParentId: parentId,
  75. Title: child.RoleName,
  76. Key: id,
  77. Value: id,
  78. }
  79. childes, isExist := tmp[child.ID]
  80. if isExist {
  81. detail.HasChildren = true
  82. detail.Children = dfs([]model.RoleDetail{}, childes, tmp)
  83. result = append(result, detail)
  84. } else {
  85. detail.HasChildren = false
  86. result = append(result, detail)
  87. }
  88. }
  89. return result
  90. }
  91. func (s *roleService) Submit(req dao.Role) *util.Errors {
  92. role := &req
  93. if role.ID == 0 {
  94. err := role.Save()
  95. if err != nil {
  96. return util.FailResponse(err.Error(), nil)
  97. }
  98. return util.SuccessResponse(util.Succeeded, nil)
  99. }
  100. err := role.Update()
  101. if err != nil {
  102. return util.FailResponse(err.Error(), nil)
  103. }
  104. return util.SuccessResponse(util.Succeeded, nil)
  105. }
  106. func (s *roleService) GetList() ([]dao.Role, error) {
  107. role := &dao.Role{}
  108. roles, err := role.GetAll()
  109. if err != nil {
  110. return nil, err
  111. }
  112. return roles, nil
  113. }
  114. func (s *roleService) Remove(id int64) *util.Errors {
  115. role := &dao.Role{
  116. ID: id,
  117. IsDeleted: 1,
  118. }
  119. queryRole := &dao.Role{
  120. ParentId: id,
  121. IsDeleted: 0,
  122. }
  123. if queryRole.IsExistChild() {
  124. return util.FailResponse(model.ExistChild, nil)
  125. }
  126. err := role.Remove()
  127. if err != nil {
  128. return util.FailResponse(err.Error(), nil)
  129. }
  130. return nil
  131. }
  132. func (s *roleService) Grant(req *model.ReqRoleGrant) error {
  133. roleIds := util.StringToIntArray(req.RoleIds)
  134. //todo 数据权限 接口权限
  135. menuIds := util.StringToIntArray(req.MenuIds)
  136. menuErr := RoleMenuService.UpdateRoleMenus(roleIds, menuIds)
  137. return menuErr
  138. }