permissions.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import config from "config";
  2. import { UserRole } from "@/models/schemas/users/UserRole";
  3. const temp = {
  4. "data.stations.getData": true,
  5. "data.news.getData": true,
  6. "event.model.news.created": true,
  7. "data.news.create": true,
  8. "data.news.findById.*": true,
  9. "data.news.updateById.*": true,
  10. "data.news.deleteById.*": true,
  11. "data.users.findById.*": true
  12. };
  13. const guest = { ...temp };
  14. const user = { ...guest };
  15. const dj = {
  16. ...user,
  17. "stations.autofill": true,
  18. "stations.blacklist": true,
  19. "stations.index": true,
  20. "stations.playback.toggle": true,
  21. "stations.queue.remove": true,
  22. "stations.queue.reposition": true,
  23. "stations.queue.reset": true,
  24. "stations.request": true,
  25. "stations.skip": true,
  26. "stations.view": true,
  27. "stations.view.manage": true
  28. };
  29. const owner = {
  30. ...dj,
  31. "stations.djs.add": true,
  32. "stations.djs.remove": true,
  33. "stations.remove": true,
  34. "stations.update": true
  35. };
  36. const moderator = {
  37. ...owner,
  38. "admin.view": true,
  39. "admin.view.import": true,
  40. "admin.view.news": true,
  41. "admin.view.playlists": true,
  42. "admin.view.punishments": true,
  43. "admin.view.reports": true,
  44. "admin.view.songs": true,
  45. "admin.view.stations": true,
  46. "admin.view.users": true,
  47. "admin.view.youtubeVideos": true,
  48. "apis.searchDiscogs": !!config.get("apis.discogs.enabled"),
  49. "news.create": true,
  50. "news.update": true,
  51. "playlists.create.admin": true,
  52. "playlists.get": true,
  53. "playlists.update.displayName": true,
  54. "playlists.update.privacy": true,
  55. "playlists.songs.add": true,
  56. "playlists.songs.remove": true,
  57. "playlists.songs.reposition": true,
  58. "playlists.view.others": true,
  59. "punishments.banIP": true,
  60. "punishments.get": true,
  61. "reports.get": true,
  62. "reports.update": true,
  63. "songs.create": true,
  64. "songs.get": true,
  65. "songs.update": true,
  66. "songs.verify": true,
  67. "stations.create.official": true,
  68. "stations.index": false,
  69. "stations.index.other": true,
  70. "stations.remove": false,
  71. "users.get": true,
  72. "users.ban": true,
  73. "users.requestPasswordReset": !!config.get("mail.enabled"),
  74. "users.resendVerifyEmail": !!config.get("mail.enabled"),
  75. "users.update": true,
  76. "youtube.requestSetAdmin": true,
  77. ...(config.get("experimental.soundcloud")
  78. ? {
  79. "admin.view.soundcloudTracks": true,
  80. "admin.view.soundcloud": true,
  81. "soundcloud.getArtist": true
  82. }
  83. : {}),
  84. ...(config.get("experimental.spotify")
  85. ? {
  86. "admin.view.spotify": true,
  87. "spotify.getTracksFromMediaSources": true,
  88. "spotify.getAlbumsFromIds": true,
  89. "spotify.getArtistsFromIds": true,
  90. "spotify.getAlternativeArtistSourcesForArtists": true,
  91. "spotify.getAlternativeAlbumSourcesForAlbums": true,
  92. "spotify.getAlternativeMediaSourcesForTracks": true,
  93. "admin.view.youtubeChannels": true,
  94. "youtube.getChannel": true
  95. }
  96. : {})
  97. };
  98. const admin = {
  99. ...moderator,
  100. "admin.view.dataRequests": true,
  101. "admin.view.statistics": true,
  102. "admin.view.youtube": true,
  103. "dataRequests.resolve": true,
  104. "media.recalculateAllRatings": true,
  105. "media.removeImportJobs": true,
  106. "news.remove": true,
  107. "playlists.clearAndRefill": true,
  108. "playlists.clearAndRefillAll": true,
  109. "playlists.createMissing": true,
  110. "playlists.deleteOrphaned": true,
  111. "playlists.removeAdmin": true,
  112. "playlists.requestOrphanedPlaylistSongs": true,
  113. "punishments.deactivate": true,
  114. "reports.remove": true,
  115. "songs.remove": true,
  116. "songs.updateAll": true,
  117. "stations.clearEveryStationQueue": true,
  118. "stations.remove": true,
  119. "users.remove": true,
  120. "users.remove.sessions": true,
  121. "users.update.restricted": true,
  122. "utils.getModules": true,
  123. "youtube.getApiRequest": true,
  124. "youtube.getMissingVideos": true,
  125. "youtube.resetStoredApiRequests": true,
  126. "youtube.removeStoredApiRequest": true,
  127. "youtube.removeVideos": true,
  128. "youtube.updateVideosV1ToV2": true,
  129. ...(config.get("experimental.soundcloud")
  130. ? {
  131. "soundcloud.fetchNewApiKey": true,
  132. "soundcloud.testApiKey": true
  133. }
  134. : {}),
  135. ...(config.get("experimental.spotify")
  136. ? {
  137. "youtube.getMissingChannels": true
  138. }
  139. : {})
  140. };
  141. const permissions: Record<
  142. UserRole | "owner" | "dj" | "guest",
  143. Record<string, boolean>
  144. > = { guest, user, dj, owner, moderator, admin };
  145. export default permissions;