b_role.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package internal
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/util/guid"
  5. "yx-dataset-server/app/errors"
  6. "yx-dataset-server/app/model"
  7. "yx-dataset-server/app/schema"
  8. )
  9. // NewRole 创建Role
  10. func NewRole(
  11. mRole model.IRole,
  12. mRoleMenu model.IRoleMenu,
  13. mTrans model.ITrans,
  14. mMenu model.IMenu,
  15. mUser model.IUser,
  16. ) *Role {
  17. return &Role{
  18. RoleModel: mRole,
  19. roleMenuModel: mRoleMenu,
  20. transModel: mTrans,
  21. menuModel: mMenu,
  22. userModel: mUser,
  23. }
  24. }
  25. // Role 创建Role对象
  26. type Role struct {
  27. RoleModel model.IRole
  28. roleMenuModel model.IRoleMenu
  29. transModel model.ITrans
  30. menuModel model.IMenu
  31. userModel model.IUser
  32. }
  33. // Query 查询数据
  34. // 权限规则:
  35. // - root / 系统管理员:可查询全部角色
  36. // - 企业管理员:仅可查询企业员工角色(code=99)
  37. // - 其他:返回空列表
  38. func (a *Role) Query(ctx context.Context, params schema.RoleQueryParam, opts ...schema.RoleQueryOptions) (*schema.RoleQueryResult, error) {
  39. code, err := GetUserRoleCode(ctx, a.userModel, a.RoleModel)
  40. if err != nil {
  41. return nil, err
  42. }
  43. switch code {
  44. case RoleCodeSystemAdmin:
  45. // 全部角色
  46. case RoleCodeEnterpriseAdmin:
  47. params.Code = RoleCodeEmployee
  48. default:
  49. return &schema.RoleQueryResult{
  50. Data: make(schema.Roles, 0),
  51. PageResult: &schema.PaginationResult{Total: 0},
  52. }, nil
  53. }
  54. return a.RoleModel.Query(ctx, params, opts...)
  55. }
  56. // Get 查询指定数据
  57. func (a *Role) Get(ctx context.Context, recordID string, opts ...schema.RoleQueryOptions) (*schema.Role, error) {
  58. item, err := a.RoleModel.Get(ctx, recordID, opts...)
  59. if err != nil {
  60. return nil, err
  61. } else if item == nil {
  62. return nil, errors.ErrNotFound
  63. }
  64. roleMenu, err := a.roleMenuModel.Query(ctx, schema.RoleMenuQueryParam{RoleId: item.RecordID})
  65. if err != nil {
  66. return nil, err
  67. }
  68. menu, err := a.menuModel.Query(ctx, schema.MenuQueryParam{RecordIDs: roleMenu.Data.ToMenuIds()})
  69. if err != nil {
  70. return nil, err
  71. }
  72. item.Menus = menu.Data
  73. return item, nil
  74. }
  75. func (a *Role) checkCode(ctx context.Context, code string) error {
  76. result, err := a.RoleModel.Query(ctx, schema.RoleQueryParam{
  77. Code: code,
  78. }, schema.RoleQueryOptions{
  79. PageParam: &schema.PaginationParam{PageSize: -1},
  80. })
  81. if err != nil {
  82. return err
  83. } else if result.PageResult.Total > 0 {
  84. return errors.New400Response("编号已经存在")
  85. }
  86. return nil
  87. }
  88. func (a *Role) getUpdate(ctx context.Context, recordID string) (*schema.Role, error) {
  89. return a.Get(ctx, recordID)
  90. }
  91. // Create 创建数据
  92. func (a *Role) Create(ctx context.Context, item schema.Role) error {
  93. item.RecordID = guid.S()
  94. err := ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  95. if len(item.Menus) > 0 {
  96. for _, menu := range item.Menus {
  97. err := a.roleMenuModel.Create(ctx, schema.RoleMenu{
  98. RecordId: guid.S(),
  99. RoleId: item.RecordID,
  100. MenuId: menu.RecordID,
  101. })
  102. if err != nil {
  103. return err
  104. }
  105. }
  106. }
  107. return a.RoleModel.Create(ctx, item)
  108. })
  109. return err
  110. }
  111. // Update 更新数据
  112. func (a *Role) Update(ctx context.Context, recordID string, item schema.Role) error {
  113. oldItem, err := a.RoleModel.Get(ctx, recordID)
  114. if err != nil {
  115. return err
  116. } else if oldItem == nil {
  117. return errors.ErrNotFound
  118. }
  119. err = ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  120. err = a.roleMenuModel.DeleteByRoleId(ctx, recordID)
  121. if len(item.Menus) > 0 {
  122. for _, menu := range item.Menus {
  123. err := a.roleMenuModel.Create(ctx, schema.RoleMenu{
  124. RecordId: guid.S(),
  125. RoleId: oldItem.RecordID,
  126. MenuId: menu.RecordID,
  127. })
  128. if err != nil {
  129. return err
  130. }
  131. }
  132. }
  133. return a.RoleModel.Update(ctx, recordID, item)
  134. })
  135. return err
  136. }
  137. // Delete 删除数据
  138. func (a *Role) Delete(ctx context.Context, recordID string) error {
  139. oldItem, err := a.RoleModel.Get(ctx, recordID)
  140. if err != nil {
  141. return err
  142. } else if oldItem == nil {
  143. return errors.ErrNotFound
  144. }
  145. err = ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  146. err = a.roleMenuModel.DeleteByRoleId(ctx, recordID)
  147. if err != nil {
  148. return err
  149. }
  150. return a.RoleModel.Delete(ctx, recordID)
  151. })
  152. return err
  153. }