X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2Fpermissions.js;h=835af24787585f620f935a4c23834166d1e430a9;hb=638802eaf20d636c16d7ce337ace508708705f2c;hp=b1de05180d2b1b9ea04f83a4921a9cbd56190162;hpb=ed531959edb865805c828f2c318146c43f6e581b;p=alttp.git diff --git a/resources/js/helpers/permissions.js b/resources/js/helpers/permissions.js index b1de051..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) => {