Browse Source

refactor: Update permissions

Owen Diffey 1 year ago
parent
commit
5f42fb22e4

+ 1 - 1
backend/src/modules/DataModule/models/stations/jobs/Index.ts

@@ -43,7 +43,7 @@ export default class Index extends DataModuleJob {
 				(user && (isOwner(station, user) || isDj(station, user))) ||
 				(user && (isOwner(station, user) || isDj(station, user))) ||
 				(payload?.adminFilter &&
 				(payload?.adminFilter &&
 					(await this._context
 					(await this._context
-						.assertPermission("data.stations.index-adminFilter")
+						.assertPermission("data.stations.index.adminFilter")
 						.then(() => true)
 						.then(() => true)
 						.catch(() => false)))
 						.catch(() => false)))
 			)
 			)

+ 1 - 1
backend/src/modules/DataModule/models/users/jobs/GetPermissions.ts

@@ -1,6 +1,6 @@
 import CacheModule from "@/modules/CacheModule";
 import CacheModule from "@/modules/CacheModule";
 import { Models } from "@/types/Models";
 import { Models } from "@/types/Models";
-import permissions from "@/permissions";
+import permissions from "@/modules/DataModule/models/users/permissions";
 import { UserRole } from "../UserRole";
 import { UserRole } from "../UserRole";
 import DataModuleJob from "@/modules/DataModule/DataModuleJob";
 import DataModuleJob from "@/modules/DataModule/DataModuleJob";
 
 

+ 201 - 0
backend/src/modules/DataModule/models/users/permissions.ts

@@ -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;

+ 0 - 154
backend/src/permissions.ts

@@ -1,154 +0,0 @@
-import config from "config";
-import { UserRole } from "@/models/schemas/users/UserRole";
-
-const temp = {
-	"data.stations.getData": true,
-	"data.news.getData": true,
-	"event.model.news.created": true,
-	"data.news.create": true,
-	"data.news.findById.*": true,
-	"data.news.updateById.*": true,
-	"data.news.deleteById.*": true,
-	"data.users.findById.*": true
-};
-
-const guest = { ...temp };
-
-const user = { ...guest };
-
-const dj = {
-	...user,
-	"stations.autofill": true,
-	"stations.blacklist": true,
-	"stations.index": true,
-	"stations.playback.toggle": true,
-	"stations.queue.remove": true,
-	"stations.queue.reposition": true,
-	"stations.queue.reset": true,
-	"stations.request": true,
-	"stations.skip": true,
-	"stations.view": true,
-	"stations.view.manage": true
-};
-
-const owner = {
-	...dj,
-	"stations.djs.add": true,
-	"stations.djs.remove": true,
-	"stations.remove": true,
-	"stations.update": true
-};
-
-const moderator = {
-	...owner,
-	"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,
-	"apis.searchDiscogs": !!config.get("apis.discogs.enabled"),
-	"news.create": true,
-	"news.update": true,
-	"playlists.create.admin": true,
-	"playlists.get": true,
-	"playlists.update.displayName": true,
-	"playlists.update.privacy": true,
-	"playlists.songs.add": true,
-	"playlists.songs.remove": true,
-	"playlists.songs.reposition": true,
-	"playlists.view.others": true,
-	"punishments.banIP": true,
-	"punishments.get": true,
-	"reports.get": true,
-	"reports.update": true,
-	"songs.create": true,
-	"songs.get": true,
-	"songs.update": true,
-	"songs.verify": true,
-	"stations.create.official": true,
-	"stations.index": false,
-	"stations.index.other": true,
-	"stations.remove": false,
-	"users.get": true,
-	"users.ban": true,
-	"users.requestPasswordReset": !!config.get("mail.enabled"),
-	"users.resendVerifyEmail": !!config.get("mail.enabled"),
-	"users.update": true,
-	"youtube.requestSetAdmin": true,
-	...(config.get("experimental.soundcloud")
-		? {
-				"admin.view.soundcloudTracks": true,
-				"admin.view.soundcloud": true,
-				"soundcloud.getArtist": true
-		  }
-		: {}),
-	...(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,
-	"admin.view.dataRequests": true,
-	"admin.view.statistics": true,
-	"admin.view.youtube": true,
-	"dataRequests.resolve": true,
-	"media.recalculateAllRatings": true,
-	"media.removeImportJobs": true,
-	"news.remove": true,
-	"playlists.clearAndRefill": true,
-	"playlists.clearAndRefillAll": true,
-	"playlists.createMissing": true,
-	"playlists.deleteOrphaned": true,
-	"playlists.removeAdmin": true,
-	"playlists.requestOrphanedPlaylistSongs": true,
-	"punishments.deactivate": true,
-	"reports.remove": true,
-	"songs.remove": true,
-	"songs.updateAll": true,
-	"stations.clearEveryStationQueue": true,
-	"stations.remove": true,
-	"users.remove": true,
-	"users.remove.sessions": true,
-	"users.update.restricted": true,
-	"utils.getModules": true,
-	"youtube.getApiRequest": true,
-	"youtube.getMissingVideos": true,
-	"youtube.resetStoredApiRequests": true,
-	"youtube.removeStoredApiRequest": true,
-	"youtube.removeVideos": true,
-	"youtube.updateVideosV1ToV2": true,
-	...(config.get("experimental.soundcloud")
-		? {
-				"soundcloud.fetchNewApiKey": true,
-				"soundcloud.testApiKey": true
-		  }
-		: {}),
-	...(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;