Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 9b40913

Browse files
authored
Merge pull request #2957 from matrix-org/t3chguy/invite_perms
Check permission to invite before showing invite buttons/disable them
2 parents 92c67cd + fd07b5c commit 9b40913

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

res/css/views/rooms/_MemberList.scss

+5
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ limitations under the License.
8787
}
8888
}
8989

90+
.mx_MemberList_invite.mx_AccessibleButton_disabled {
91+
background-color: $greyed-fg-color;;
92+
cursor: not-allowed;
93+
}
94+
9095
.mx_MemberList_invite span {
9196
background-image: url('$(res)/img/feather-customised/user-add.svg');
9297
background-repeat: no-repeat;

src/components/views/rooms/MemberInfo.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@ module.exports = withMatrixClient(React.createClass({
589589

590590
can.kick = me.powerLevel >= powerLevels.kick;
591591
can.ban = me.powerLevel >= powerLevels.ban;
592+
can.invite = me.powerLevel >= powerLevels.invite;
592593
can.mute = me.powerLevel >= editPowerLevel;
593594
can.modifyLevel = me.powerLevel >= editPowerLevel && (isMe || me.powerLevel > them.powerLevel);
594595
can.modifyLevelMax = me.powerLevel;
@@ -727,7 +728,7 @@ module.exports = withMatrixClient(React.createClass({
727728
);
728729
}
729730

730-
if (!member || !member.membership || member.membership === 'leave') {
731+
if (this.state.can.invite && (!member || !member.membership || member.membership === 'leave')) {
731732
const roomId = member && member.roomId ? member.roomId : RoomViewStore.getRoomId();
732733
const onInviteUserButton = async () => {
733734
try {

src/components/views/rooms/MemberList.js

+14-1
Original file line numberDiff line numberDiff line change
@@ -449,10 +449,23 @@ module.exports = React.createClass({
449449
const cli = MatrixClientPeg.get();
450450
const room = cli.getRoom(this.props.roomId);
451451
let inviteButton;
452+
452453
if (room && room.getMyMembership() === 'join') {
454+
// assume we can invite until proven false
455+
let canInvite = true;
456+
457+
const plEvent = room.currentState.getStateEvents("m.room.power_levels", "");
458+
const me = room.getMember(cli.getUserId());
459+
if (plEvent && me) {
460+
const content = plEvent.getContent();
461+
if (content && content.invite > me.powerLevel) {
462+
canInvite = false;
463+
}
464+
}
465+
453466
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
454467
inviteButton =
455-
<AccessibleButton className="mx_MemberList_invite" onClick={this.onInviteButtonClick}>
468+
<AccessibleButton className="mx_MemberList_invite" onClick={this.onInviteButtonClick} disabled={!canInvite}>
456469
<span>{ _t('Invite to this room') }</span>
457470
</AccessibleButton>;
458471
}

0 commit comments

Comments
 (0)