| 
					
				 | 
			
			
				@@ -0,0 +1,201 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import config from "config"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { UserRole } from "@/modules/DataModule/models/users/UserRole"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const guest = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const user = { ...guest }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const dj = { ...user }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const owner = { ...dj }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const moderator = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...owner, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule importJobs model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.importJobs.create": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.importJobs.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.importJobs.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.importJobs.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.importJobs.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule news model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.news.create": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.news.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.news.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule playlists model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.addSongById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.create.admin": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.removeSongById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.repositionSongById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.updateDisplayNameById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.updatePrivacyById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule punishments model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.punishments.banIP": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.punishments.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.punishments.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule reports model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.reports.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.reports.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.reports.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule songs model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.create": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.verifyById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule stations model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.create.official": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.index.adminFilter": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule users model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.banById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.requestPasswordResetById.*": !!config.get("mail.enabled"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.resendVerifyEmailById.*": !!config.get("mail.enabled"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule youtubeVideos model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeVideos.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeVideos.requestSet": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DiscogsModule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"discogs.search": !!config.get("apis.discogs.enabled"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// Frontend admin views 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.import": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.news": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.playlists": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.punishments": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.reports": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.songs": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.stations": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.users": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.youtubeVideos": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// // Experimental SoundCloud 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// ...(config.get("experimental.soundcloud") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"admin.view.soundcloudTracks": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"admin.view.soundcloud": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"soundcloud.getArtist": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	: {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// // Experimental Spotify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// ...(config.get("experimental.spotify") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"admin.view.spotify": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"spotify.getTracksFromMediaSources": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"spotify.getAlbumsFromIds": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"spotify.getArtistsFromIds": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"spotify.getAlternativeArtistSourcesForArtists": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"spotify.getAlternativeAlbumSourcesForAlbums": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"spotify.getAlternativeMediaSourcesForTracks": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"admin.view.youtubeChannels": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"youtube.getChannel": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	: {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const admin = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...moderator, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule dataRequests model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.dataRequests.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.dataRequests.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.dataRequests.resolveById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule importJobs model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.importJobs.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule news model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.news.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule playlists model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.clearAndRefillById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.clearAndRefillAll": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.createMissing": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.deleteOrphaned": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.playlists.requestOrphanedPlaylistSongs": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule punishments model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.punishments.deactivateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule ratings model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.ratings.recalculateAll": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule reports model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.reports.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule songs model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.songs.updateAll": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule stations model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.clearEveryStationQueue": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.stations.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule users model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.removeSessionsById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.users.updateById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule youtubeApiRequests model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeApiRequests.findById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeApiRequests.getData": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeApiRequests.removeAll": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeApiRequests.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// DataModule youtubeVideos model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeVideos.getMissing": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeVideos.removeById.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"data.youtubeVideos.migrateV1ToV2.*": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// Frontend admin views 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.dataRequests": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.statistics": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.youtube": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// // Experimental SoundCloud 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// ...(config.get("experimental.soundcloud") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"soundcloud.fetchNewApiKey": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"soundcloud.testApiKey": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	: {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// // Experimental Spotify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// ...(config.get("experimental.spotify") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 			"youtube.getMissingChannels": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 	: {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const permissions: Record< 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	UserRole | "owner" | "dj" | "guest", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Record<string, boolean> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	guest, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	user, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	dj, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	owner, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	moderator, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	admin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default permissions; 
			 |