admin_permission.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/pkg/errors"
  6. "gorm.io/gorm"
  7. "sghgogs.com/sghblog/authorization-service/domain/model/base"
  8. req "sghgogs.com/sghblog/authorization-service/domain/model/request"
  9. pb "sghgogs.com/sghblog/authorization-service/proto"
  10. "sghgogs.com/sghblog/authorization-service/utils/authutil"
  11. "sghgogs.com/sghblog/common"
  12. "sghgogs.com/sghblog/common/errorcode"
  13. "time"
  14. )
  15. func (s *Service) GetAdminPermissionList(query *pb.GetAdminPermissionListRequest) ([]*pb.AdminPermission, int64, error) {
  16. permissions := make([]*pb.AdminPermission, 0)
  17. list, count, err := s.Repository.GetAdminPermissionList(query)
  18. if err != nil {
  19. if errors.Is(err, gorm.ErrRecordNotFound) {
  20. return permissions, 0, nil
  21. }
  22. return permissions, 0, errorcode.New("authorization service", err.Error(), 500)
  23. }
  24. for _, item := range list {
  25. var res *pb.AdminPermission
  26. common.SwapTo(item, &res)
  27. res.UpdatedAt = ConvertTimeToInt64(*item.UpdatedAt)
  28. res.CreatedAt = ConvertTimeToInt64(item.CreatedAt)
  29. res.Status = item.Status
  30. res.Roles = base.RolesProto(item.Roles)
  31. res.Endpoint = item.Endpoint
  32. permissions = append(permissions, res)
  33. }
  34. return permissions, count, nil
  35. }
  36. func (s *Service) GetAdminPermissionAll() ([]req.AdminPermission, error) {
  37. return s.Repository.GetAdminPermissionAll()
  38. }
  39. func (s *Service) GetAdminPermission(query *pb.GetAdminPermissionRequest) (pb.AdminPermission, error) {
  40. if exists, err := s.Repository.IsAdminPermissionExists(query.Id); err != nil {
  41. return pb.AdminPermission{}, errorcode.New("authorization service", err.Error(), 500)
  42. } else {
  43. if !exists {
  44. return pb.AdminPermission{}, errorcode.New("authorization service", common.ErrorMessage[common.InvalidRoleID], 400)
  45. }
  46. }
  47. fmt.Println("进入了")
  48. permission, err := s.Repository.GetAdminPermission(query)
  49. if err != nil {
  50. return pb.AdminPermission{}, errorcode.New("authorization service", err.Error(), 500)
  51. }
  52. return pb.AdminPermission{
  53. Id: permission.ID,
  54. Name: permission.Name,
  55. Description: permission.Description,
  56. Roles: base.RolesProto(permission.Roles),
  57. CreatedAt: ConvertTimeToInt64(permission.CreatedAt),
  58. CreatedBy: permission.CreatedBy,
  59. UpdatedAt: ConvertTimeToInt64(*permission.UpdatedAt),
  60. Status: permission.Status,
  61. Endpoint: permission.Endpoint,
  62. IsReserved: permission.IsReserved,
  63. }, nil
  64. }
  65. func (s *Service) CreateAdminPermission(ctx context.Context, permission *pb.CreateAdminPermissionRequest) error {
  66. _, createdBy, _, _ := ParseMetadata(ctx)
  67. adminPermission := req.AdminPermission{
  68. Name: permission.Name,
  69. Description: permission.Description,
  70. CreatedAt: time.Now(),
  71. CreatedBy: createdBy,
  72. UpdatedAt: nil,
  73. Endpoint: permission.Endpoint,
  74. Status: permission.Status,
  75. IsReserved: false,
  76. }
  77. if err := s.Repository.CreateAdminPermission(adminPermission, permission.Roles); err != nil {
  78. return errorcode.New("authorization service", err.Error(), 500)
  79. }
  80. return nil
  81. }
  82. func (s *Service) UpdateAdminPermission(ctx context.Context, permission *pb.UpdateAdminPermissionRequest) error {
  83. // 获取权限ID作为锁的键
  84. lockKey := fmt.Sprintf("update_admin_permission_%d", permission.PermissionId)
  85. lock := authutil.JWTAuthService.Mu.NewMutex(lockKey)
  86. // 获取锁,保证原子性
  87. if err := lock.Lock(); err != nil {
  88. return err
  89. }
  90. defer lock.Unlock()
  91. // 1.查询角色是否存在
  92. if exists, err := s.Repository.IsAdminPermissionExists(permission.PermissionId); err != nil {
  93. return errorcode.New("authorization service", err.Error(), 500)
  94. } else {
  95. if !exists {
  96. return errorcode.New("authorization service", common.ErrorMessage[common.InvalidRoleID], 400)
  97. }
  98. }
  99. _, createdBy, _, _ := ParseMetadata(ctx)
  100. m := map[string]interface{}{
  101. "updated_by": createdBy,
  102. }
  103. if permission.Description != "" {
  104. m["description"] = permission.Description
  105. }
  106. if permission.Endpoint != "" {
  107. m["endpoint"] = permission.Endpoint
  108. }
  109. if err := s.Repository.UpdateAdminPermission(permission.PermissionId, m, permission.Roles); err != nil {
  110. return errorcode.New("authorization service", err.Error(), 500)
  111. }
  112. return nil
  113. }
  114. func (s *Service) DeleteAdminPermission(permission *pb.DeleteAdminPermissionRequest) error {
  115. // 获取权限ID作为锁的键
  116. lockKey := fmt.Sprintf("delete_admin_permission_%d", permission.PermissionId)
  117. lock := authutil.JWTAuthService.Mu.NewMutex(lockKey)
  118. // 获取锁,保证原子性
  119. if err := lock.Lock(); err != nil {
  120. return err
  121. }
  122. defer lock.Unlock()
  123. // 1.查询角色是否存在
  124. if exists, err := s.Repository.IsAdminPermissionExists(permission.PermissionId); err != nil {
  125. return errorcode.New("authorization service", err.Error(), 500)
  126. } else {
  127. if !exists {
  128. return errorcode.New("authorization service", common.ErrorMessage[common.InvalidRoleID], 400)
  129. }
  130. }
  131. // 彻底删除角色
  132. if err := s.Repository.DeleteAdminPermission(permission.PermissionId); err != nil {
  133. return errorcode.New("authorization service", err.Error(), 500)
  134. }
  135. return nil
  136. }
  137. func (s *Service) ToggleAdminPermission(query *pb.ToggleAdminPermissionRequest) error {
  138. // 获取权限ID作为锁的键
  139. lockKey := fmt.Sprintf("toggle_admin_permission_%d", query.PermissionId)
  140. lock := authutil.JWTAuthService.Mu.NewMutex(lockKey)
  141. // 获取锁,保证原子性
  142. if err := lock.Lock(); err != nil {
  143. return err
  144. }
  145. defer lock.Unlock()
  146. if exists, err := s.Repository.IsAdminPermissionExists(query.PermissionId); err != nil {
  147. return errorcode.New("authorization service", err.Error(), 500)
  148. } else {
  149. if !exists {
  150. return errorcode.New("authorization service", common.ErrorMessage[common.AccountDoesNotExist], 400)
  151. }
  152. }
  153. if err := s.Repository.ToggleAdminPermission(query); err != nil {
  154. return errorcode.New("authorization service", err.Error(), 500)
  155. }
  156. return nil
  157. }