role.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package role
  2. import (
  3. "authService/model"
  4. "authService/response"
  5. "authService/util"
  6. "authService/validators"
  7. "github.com/golang-module/carbon"
  8. jsoniter "github.com/json-iterator/go"
  9. )
  10. var json = jsoniter.ConfigCompatibleWithStandardLibrary
  11. // 创建角色
  12. func Create(role *validators.Role) *response.ErrCode {
  13. var permissions = util.JsonEncode(role.Permissions)
  14. createErr := model.DB.Create(&model.Role{
  15. Name: role.Name,
  16. Permissions: permissions,
  17. }).Error
  18. if createErr != nil {
  19. return response.Err
  20. }
  21. return nil
  22. }
  23. // 修改角色
  24. func Update(role *validators.Role) *response.ErrCode {
  25. if role.ID == 0 {
  26. return &response.ErrCode{
  27. Msg: "ID不能为空",
  28. Code: response.ERROR,
  29. }
  30. }
  31. var permissions = util.JsonEncode(role.Permissions)
  32. updateErr := model.DB.Where("id = ?", role.ID).Select("name", "permissions").Updates(model.Role{
  33. Name: role.Name,
  34. Permissions: permissions,
  35. }).Error
  36. if updateErr != nil {
  37. return response.Err
  38. }
  39. return nil
  40. }
  41. // 获取角色列表
  42. func FindByRoleIdWithUser(id int64) (*model.Role, *response.ErrCode) {
  43. var role *model.Role
  44. err := model.DB.Model(&model.Role{}).Where("id = ?", id).Preload("Users.Roles").First(&role).Error
  45. if err != nil {
  46. return nil, response.Err
  47. }
  48. return role, nil
  49. }
  50. // 获取角色列表
  51. func List() (roles []*model.Role) {
  52. model.DB.Order("id desc").Find(&roles)
  53. return
  54. }
  55. func Paginate(page, pageSize int, key string) ([]*model.Role, int64) {
  56. var total int64
  57. var roles []*model.Role
  58. query := model.DB.Model(&model.Role{})
  59. if key != "" {
  60. query = query.Where("name like ?", "%"+key+"%")
  61. }
  62. query.Count(&total)
  63. query.Scopes(model.Paginate(page, pageSize)).Preload("Users").Order("id desc").Find(&roles)
  64. return roles, total
  65. }
  66. // 删除角色
  67. func Delete(id int64) *response.ErrCode {
  68. // 检查角色是否关联了用户
  69. var count int64
  70. model.DB.Model(&model.UserRole{}).Where("role_id = ?", id).Count(&count)
  71. if count > 0 {
  72. return &response.ErrCode{
  73. Msg: "角色已关联用户,无法删除",
  74. Code: response.ERROR,
  75. }
  76. }
  77. model.DB.Where("id = ?", id).Delete(&model.Role{})
  78. return nil
  79. }
  80. func FormatRole(role *model.Role) *validators.Role {
  81. var permissions []string
  82. json.UnmarshalFromString(role.Permissions, &permissions)
  83. if permissions == nil {
  84. permissions = make([]string, 0)
  85. }
  86. return &validators.Role{
  87. ID: role.ID,
  88. Name: role.Name,
  89. Permissions: permissions,
  90. UserTotal: len(role.Users),
  91. CreatedAt: carbon.Time2Carbon(role.CreatedAt).Format("Y/m/d H:i:s"),
  92. }
  93. }