room_permission.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package room
  2. import (
  3. pb "bet24.com/servers/micros/audioroom/proto"
  4. "bet24.com/servers/micros/audioroom/transaction/database"
  5. )
  6. // 加载权限
  7. func (this *Room) loadPermission(isFromDB bool) {
  8. var list []pb.PermissionInfo
  9. if isFromDB {
  10. // 数据库取数据
  11. list = database.GetPermissionList(this.RoomId)
  12. }
  13. for i := pb.PermissionType_Invalid + 1; i < pb.PermissionType_Max; i++ {
  14. isExist := false
  15. // 遍历是否已生成数据
  16. for _, v := range list {
  17. if v.PermissionType != i {
  18. continue
  19. }
  20. isExist = true
  21. break
  22. }
  23. // 已存在
  24. if isExist {
  25. continue
  26. }
  27. enabled := 0
  28. // 房间默认开启
  29. if i == pb.PermissionType_Mic || i == pb.PermissionType_Room {
  30. enabled = 1
  31. }
  32. // 新增数据
  33. list = append(list, pb.PermissionInfo{
  34. PermissionType: i,
  35. Enabled: enabled,
  36. })
  37. }
  38. this.permissionList = list
  39. return
  40. }
  41. // 获取权限列表
  42. func (this *Room) GetPermissionList() []pb.PermissionInfo {
  43. var permissionList []pb.PermissionInfo
  44. for _, v := range this.permissionList {
  45. if v.PermissionType == pb.PermissionType_Room {
  46. continue
  47. }
  48. permissionList = append(permissionList, v)
  49. }
  50. return permissionList
  51. }
  52. // 获取游戏权限类型
  53. func (this *Room) GetGamePermissionType(gameId int) int {
  54. for _, v := range pb.GamePermissions {
  55. if v.GameId == gameId {
  56. return v.PermissionType
  57. }
  58. }
  59. return 0
  60. }
  61. // 判断是否有游戏权限
  62. func (this *Room) IsGamePermission(userId, gameId int) bool {
  63. // 获取游戏权限类型
  64. permissionType := this.GetGamePermissionType(gameId)
  65. return this.IsPermission(userId, permissionType)
  66. }
  67. // 判断是否有权限
  68. func (this *Room) IsPermission(userId, permissionType int) bool {
  69. // 房主拥有所有权限
  70. if this.UserId == userId {
  71. return true
  72. }
  73. // 会员身份
  74. if m := this.GetMemberInfo(userId); m.RoleId != pb.Role_Assistant {
  75. return false
  76. }
  77. // 判断是否开启该权限
  78. for _, v := range this.permissionList {
  79. // 权限类型
  80. if v.PermissionType != permissionType {
  81. continue
  82. }
  83. return v.Enabled == 1
  84. }
  85. return false
  86. }
  87. // 设置权限
  88. func (this *Room) SetPermission(permissionType, enabled int) int {
  89. // 判断是否超出范围
  90. if permissionType <= pb.PermissionType_Invalid || permissionType >= pb.PermissionType_Max {
  91. return 11
  92. }
  93. isNew := true
  94. for i := 0; i < len(this.permissionList); i++ {
  95. if this.permissionList[i].PermissionType != permissionType {
  96. continue
  97. }
  98. isNew = false
  99. this.permissionList[i].Enabled = enabled
  100. break
  101. }
  102. // 新增权限
  103. if isNew {
  104. this.permissionList = append(this.permissionList, pb.PermissionInfo{
  105. PermissionType: permissionType,
  106. Enabled: enabled,
  107. })
  108. }
  109. // 数据库操作
  110. go database.SetRoomPermission(this.RoomId, permissionType, enabled)
  111. return 1
  112. }
  113. // 是否有设置权限
  114. func (this *Room) IsSetPermission(userId, toUserId int, permissionType int) bool {
  115. // 不能对自己和房主操作
  116. if userId == toUserId || this.UserId == toUserId {
  117. return false
  118. }
  119. // 管理员有超级权限
  120. if this.UserId == userId {
  121. return true
  122. }
  123. // 对象会员身份
  124. toM := this.GetMemberInfo(toUserId)
  125. // 会员身份
  126. m := this.GetMemberInfo(userId)
  127. // 同级别的角色,没有权限
  128. if m.RoleId == toM.RoleId {
  129. return false
  130. }
  131. // 创建者,有所有的权限
  132. if m.RoleId == pb.Role_Administrator {
  133. return true
  134. }
  135. // 不是助理(管理员)
  136. if m.RoleId != pb.Role_Assistant {
  137. return false
  138. }
  139. // 判断权限
  140. for _, p := range this.permissionList {
  141. if p.PermissionType != permissionType {
  142. continue
  143. }
  144. return p.Enabled == pb.Permission_Open
  145. }
  146. return false
  147. }