permissions.ts 3.8 KB

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