Don't show lobby, and don't provide events for lobby for peers that don't have PROMOTE_PEER permission, fixes #208
parent
136a41a7e9
commit
574a86e3ec
|
|
@ -136,6 +136,7 @@ const TopBar = (props) =>
|
||||||
openUsersTab,
|
openUsersTab,
|
||||||
unread,
|
unread,
|
||||||
canLock,
|
canLock,
|
||||||
|
canPromote,
|
||||||
classes
|
classes
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
|
@ -305,6 +306,7 @@ const TopBar = (props) =>
|
||||||
defaultMessage : 'Show lobby'
|
defaultMessage : 'Show lobby'
|
||||||
})}
|
})}
|
||||||
color='inherit'
|
color='inherit'
|
||||||
|
disabled={!canPromote}
|
||||||
onClick={() => setLockDialogOpen(!room.lockDialogOpen)}
|
onClick={() => setLockDialogOpen(!room.lockDialogOpen)}
|
||||||
>
|
>
|
||||||
<PulsingBadge
|
<PulsingBadge
|
||||||
|
|
@ -380,6 +382,7 @@ TopBar.propTypes =
|
||||||
openUsersTab : PropTypes.func.isRequired,
|
openUsersTab : PropTypes.func.isRequired,
|
||||||
unread : PropTypes.number.isRequired,
|
unread : PropTypes.number.isRequired,
|
||||||
canLock : PropTypes.bool.isRequired,
|
canLock : PropTypes.bool.isRequired,
|
||||||
|
canPromote : PropTypes.bool.isRequired,
|
||||||
classes : PropTypes.object.isRequired,
|
classes : PropTypes.object.isRequired,
|
||||||
theme : PropTypes.object.isRequired
|
theme : PropTypes.object.isRequired
|
||||||
};
|
};
|
||||||
|
|
@ -397,7 +400,10 @@ const mapStateToProps = (state) =>
|
||||||
state.toolarea.unreadFiles,
|
state.toolarea.unreadFiles,
|
||||||
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)),
|
||||||
|
canPromote :
|
||||||
|
state.me.roles.some((role) =>
|
||||||
|
state.room.permissionsFromRoles.PROMOTE_PEER.includes(role))
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) =>
|
const mapDispatchToProps = (dispatch) =>
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,27 @@ const config = require('../config/config');
|
||||||
|
|
||||||
const logger = new Logger('Room');
|
const logger = new Logger('Room');
|
||||||
|
|
||||||
|
// In case they are not configured properly
|
||||||
|
const accessFromRoles =
|
||||||
|
{
|
||||||
|
BYPASS_ROOM_LOCK : [ userRoles.ADMIN ],
|
||||||
|
BYPASS_LOBBY : [ userRoles.NORMAL ],
|
||||||
|
...config.accessFromRoles
|
||||||
|
};
|
||||||
|
|
||||||
|
const permissionsFromRoles =
|
||||||
|
{
|
||||||
|
CHANGE_ROOM_LOCK : [ userRoles.NORMAL ],
|
||||||
|
PROMOTE_PEER : [ userRoles.NORMAL ],
|
||||||
|
SEND_CHAT : [ userRoles.NORMAL ],
|
||||||
|
MODERATE_CHAT : [ userRoles.MODERATOR ],
|
||||||
|
SHARE_SCREEN : [ userRoles.NORMAL ],
|
||||||
|
SHARE_FILE : [ userRoles.NORMAL ],
|
||||||
|
MODERATE_FILES : [ userRoles.MODERATOR ],
|
||||||
|
MODERATE_ROOM : [ userRoles.MODERATOR ],
|
||||||
|
...config.permissionsFromRoles
|
||||||
|
};
|
||||||
|
|
||||||
class Room extends EventEmitter
|
class Room extends EventEmitter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|
@ -187,7 +208,11 @@ class Room extends EventEmitter
|
||||||
|
|
||||||
this._peerJoining(promotedPeer);
|
this._peerJoining(promotedPeer);
|
||||||
|
|
||||||
for (const peer of this._getJoinedPeers())
|
for (
|
||||||
|
const peer of this._getPeersWithPermission({
|
||||||
|
permission : permissionsFromRoles.PROMOTE_PEER
|
||||||
|
})
|
||||||
|
)
|
||||||
{
|
{
|
||||||
this._notification(peer.socket, 'lobby:promotedPeer', { peerId: id });
|
this._notification(peer.socket, 'lobby:promotedPeer', { peerId: id });
|
||||||
}
|
}
|
||||||
|
|
@ -219,7 +244,11 @@ class Room extends EventEmitter
|
||||||
{
|
{
|
||||||
const { id, displayName } = changedPeer;
|
const { id, displayName } = changedPeer;
|
||||||
|
|
||||||
for (const peer of this._getJoinedPeers())
|
for (
|
||||||
|
const peer of this._getPeersWithPermission({
|
||||||
|
permission : permissionsFromRoles.PROMOTE_PEER
|
||||||
|
})
|
||||||
|
)
|
||||||
{
|
{
|
||||||
this._notification(peer.socket, 'lobby:changeDisplayName', { peerId: id, displayName });
|
this._notification(peer.socket, 'lobby:changeDisplayName', { peerId: id, displayName });
|
||||||
}
|
}
|
||||||
|
|
@ -229,7 +258,11 @@ class Room extends EventEmitter
|
||||||
{
|
{
|
||||||
const { id, picture } = changedPeer;
|
const { id, picture } = changedPeer;
|
||||||
|
|
||||||
for (const peer of this._getJoinedPeers())
|
for (
|
||||||
|
const peer of this._getPeersWithPermission({
|
||||||
|
permission : permissionsFromRoles.PROMOTE_PEER
|
||||||
|
})
|
||||||
|
)
|
||||||
{
|
{
|
||||||
this._notification(peer.socket, 'lobby:changePicture', { peerId: id, picture });
|
this._notification(peer.socket, 'lobby:changePicture', { peerId: id, picture });
|
||||||
}
|
}
|
||||||
|
|
@ -241,7 +274,11 @@ class Room extends EventEmitter
|
||||||
|
|
||||||
const { id } = closedPeer;
|
const { id } = closedPeer;
|
||||||
|
|
||||||
for (const peer of this._getJoinedPeers())
|
for (
|
||||||
|
const peer of this._getPeersWithPermission({
|
||||||
|
permission : permissionsFromRoles.PROMOTE_PEER
|
||||||
|
})
|
||||||
|
)
|
||||||
{
|
{
|
||||||
this._notification(peer.socket, 'lobby:peerClosed', { peerId: id });
|
this._notification(peer.socket, 'lobby:peerClosed', { peerId: id });
|
||||||
}
|
}
|
||||||
|
|
@ -344,7 +381,11 @@ class Room extends EventEmitter
|
||||||
{
|
{
|
||||||
this._lobby.parkPeer(parkPeer);
|
this._lobby.parkPeer(parkPeer);
|
||||||
|
|
||||||
for (const peer of this._getJoinedPeers())
|
for (
|
||||||
|
const peer of this._getPeersWithPermission({
|
||||||
|
permission : permissionsFromRoles.PROMOTE_PEER
|
||||||
|
})
|
||||||
|
)
|
||||||
{
|
{
|
||||||
this._notification(peer.socket, 'parkedPeer', { peerId: parkPeer.id });
|
this._notification(peer.socket, 'parkedPeer', { peerId: parkPeer.id });
|
||||||
}
|
}
|
||||||
|
|
@ -1452,6 +1493,19 @@ class Room extends EventEmitter
|
||||||
.filter((peer) => peer.joined && peer !== excludePeer);
|
.filter((peer) => peer.joined && peer !== excludePeer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getPeersWithPermission({ permission = null, excludePeer = undefined, joined = true })
|
||||||
|
{
|
||||||
|
return Object.values(this._peers)
|
||||||
|
.filter(
|
||||||
|
(peer) =>
|
||||||
|
peer.joined === joined &&
|
||||||
|
peer !== excludePeer &&
|
||||||
|
peer.roles.some(
|
||||||
|
(role) => permission.includes(role)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
_timeoutCallback(callback)
|
_timeoutCallback(callback)
|
||||||
{
|
{
|
||||||
let called = false;
|
let called = false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue