X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2Fpermissions.js;h=835af24787585f620f935a4c23834166d1e430a9;hb=16bf08bb5cd6118704346f642a491d37c998ef54;hp=4ce6935d83054ebb8bcb4e127166c53a0f181698;hpb=43da6b2ec78774e7b045a09c68af39717b5f5dbc;p=alttp.git diff --git a/resources/js/helpers/permissions.js b/resources/js/helpers/permissions.js index 4ce6935..835af24 100644 --- a/resources/js/helpers/permissions.js +++ b/resources/js/helpers/permissions.js @@ -7,6 +7,33 @@ export const isAdmin = user => user && user.role === 'admin'; export const isSameUser = (user, subject) => user && subject && user.id === subject.id; +// Channels + +export const isChannelAdmin = (user, channel) => + user && channel && user.channel_crews && + user.channel_crews.find(c => c.role === 'admin' && c.channel_id === channel.id); + +// Episodes + +export const episodeHasChannel = (episode, channel) => + episode && channel && episode.channels && episode.channels.find(c => c.id === channel.id); + +export const mayRestreamEpisodes = user => + user && user.channel_crews && user.channel_crews.find(c => c.role === 'admin'); + +export const mayEditRestream = (user, episode, channel) => + episodeHasChannel(episode, channel) && isChannelAdmin(user, channel); + +export const canRestreamEpisode = (user, episode) => { + if (!user || !episode || !mayRestreamEpisodes(user)) return false; + const available_channels = user.channel_crews + .filter(c => c.role === 'admin') + .map(c => c.channel_id); + const claimed_channels = ((episode && episode.channels) || []).map(c => c.id); + const remaining_channels = available_channels.filter(id => !claimed_channels.includes(id)); + return remaining_channels.length > 0; +}; + // Tournaments export const isApplicant = (user, tournament) => { @@ -61,6 +88,15 @@ export const mayApply = (user, tournament) => export const mayHandleApplications = (user, tournament) => tournament && tournament.accept_applications && isTournamentAdmin(user, tournament); +export const mayReportResult = (user, tournament) => { + if (!user || !tournament) return false; + if (tournament.type === 'open-async') return true; + return isRunner(user, tournament); +}; + +export const mayEditRound = (user, tournament) => + !tournament.locked && isTournamentAdmin(user, tournament); + export const mayLockRound = (user, tournament) => !tournament.locked && isTournamentAdmin(user, tournament); @@ -78,7 +114,6 @@ export const maySeeResults = (user, tournament, round) => round.locked || hasFinished(user, round) || isTournamentMonitor(user, tournament) || - (isTournamentAdmin(user, tournament) && !isRunner(user, tournament)) || Round.isComplete(tournament, round); // Users