Add permission for sending extra video, fixes #280

auto_join_3.3
Håvar Aambø Fosstveit 2020-05-04 00:40:39 +02:00
parent 08e2c425c6
commit 28bad32f69
4 changed files with 39 additions and 22 deletions

View File

@ -165,6 +165,7 @@ const TopBar = (props) =>
toggleToolArea, toggleToolArea,
openUsersTab, openUsersTab,
unread, unread,
canProduceExtraVideo,
canLock, canLock,
canPromote, canPromote,
classes classes
@ -414,6 +415,7 @@ const TopBar = (props) =>
> >
<MenuItem <MenuItem
dense dense
disabled={!canProduceExtraVideo}
onClick={() => onClick={() =>
{ {
handleMoreActionsClose(); handleMoreActionsClose();
@ -453,6 +455,7 @@ TopBar.propTypes =
toggleToolArea : PropTypes.func.isRequired, toggleToolArea : PropTypes.func.isRequired,
openUsersTab : PropTypes.func.isRequired, openUsersTab : PropTypes.func.isRequired,
unread : PropTypes.number.isRequired, unread : PropTypes.number.isRequired,
canProduceExtraVideo : PropTypes.bool.isRequired,
canLock : PropTypes.bool.isRequired, canLock : PropTypes.bool.isRequired,
canPromote : PropTypes.bool.isRequired, canPromote : PropTypes.bool.isRequired,
classes : PropTypes.object.isRequired, classes : PropTypes.object.isRequired,
@ -470,6 +473,9 @@ const mapStateToProps = (state) =>
myPicture : state.me.picture, myPicture : state.me.picture,
unread : state.toolarea.unreadMessages + unread : state.toolarea.unreadMessages +
state.toolarea.unreadFiles + raisedHandsSelector(state), state.toolarea.unreadFiles + raisedHandsSelector(state),
canProduceExtraVideo :
state.me.roles.some((role) =>
state.room.permissionsFromRoles.EXTRA_VIDEO.includes(role)),
canLock : canLock :
state.me.roles.some((role) => state.me.roles.some((role) =>
state.room.permissionsFromRoles.CHANGE_ROOM_LOCK.includes(role)), state.room.permissionsFromRoles.CHANGE_ROOM_LOCK.includes(role)),

View File

@ -36,6 +36,7 @@ const initialState =
SEND_CHAT : [], SEND_CHAT : [],
MODERATE_CHAT : [], MODERATE_CHAT : [],
SHARE_SCREEN : [], SHARE_SCREEN : [],
EXTRA_VIDEO : [],
SHARE_FILE : [], SHARE_FILE : [],
MODERATE_FILES : [], MODERATE_FILES : [],
MODERATE_ROOM : [] MODERATE_ROOM : []

View File

@ -235,6 +235,8 @@ module.exports =
MODERATE_CHAT : [ userRoles.MODERATOR ], MODERATE_CHAT : [ userRoles.MODERATOR ],
// The role(s) have permission to share screen // The role(s) have permission to share screen
SHARE_SCREEN : [ userRoles.NORMAL ], SHARE_SCREEN : [ userRoles.NORMAL ],
// The role(s) have permission to produce extra video
EXTRA_VIDEO : [ userRoles.NORMAL ],
// The role(s) have permission to share files // The role(s) have permission to share files
SHARE_FILE : [ userRoles.NORMAL ], SHARE_FILE : [ userRoles.NORMAL ],
// The role(s) have permission to moderate files // The role(s) have permission to moderate files

View File

@ -24,6 +24,7 @@ const permissionsFromRoles =
SEND_CHAT : [ userRoles.NORMAL ], SEND_CHAT : [ userRoles.NORMAL ],
MODERATE_CHAT : [ userRoles.MODERATOR ], MODERATE_CHAT : [ userRoles.MODERATOR ],
SHARE_SCREEN : [ userRoles.NORMAL ], SHARE_SCREEN : [ userRoles.NORMAL ],
EXTRA_VIDEO : [ userRoles.NORMAL ],
SHARE_FILE : [ userRoles.NORMAL ], SHARE_FILE : [ userRoles.NORMAL ],
MODERATE_FILES : [ userRoles.MODERATOR ], MODERATE_FILES : [ userRoles.MODERATOR ],
MODERATE_ROOM : [ userRoles.MODERATOR ], MODERATE_ROOM : [ userRoles.MODERATOR ],
@ -747,6 +748,13 @@ class Room extends EventEmitter
) )
throw new Error('peer not authorized'); throw new Error('peer not authorized');
if (
appData.source === 'extravideo' &&
!peer.roles.some(
(role) => permissionsFromRoles.EXTRA_VIDEO.includes(role))
)
throw new Error('peer not authorized');
// Ensure the Peer is joined. // Ensure the Peer is joined.
if (!peer.joined) if (!peer.joined)
throw new Error('Peer not yet joined'); throw new Error('Peer not yet joined');