Skip to content

Commit 34b0964

Browse files
committed
Support v12 rooms in maySendEvent
Follows on from #4937
1 parent 09c67d9 commit 34b0964

File tree

2 files changed

+45
-12
lines changed

2 files changed

+45
-12
lines changed

spec/unit/room-state.spec.ts

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ describe("RoomState", function () {
3838
const userLazy = "@lazy:bar";
3939

4040
let state = new RoomState(roomId);
41+
let statev12 = new RoomState(roomId);
4142

4243
beforeEach(function () {
43-
state = new RoomState(roomId);
44-
state.setStateEvents([
44+
const commonEvents = [
4545
utils.mkMembership({
4646
// userA joined
4747
event: true,
@@ -65,7 +65,12 @@ describe("RoomState", function () {
6565
content: {
6666
name: "Room name goes here",
6767
},
68-
}),
68+
})
69+
];
70+
71+
state = new RoomState(roomId);
72+
state.setStateEvents([
73+
...commonEvents,
6974
utils.mkEvent({
7075
// Room creation
7176
type: "m.room.create",
@@ -75,6 +80,19 @@ describe("RoomState", function () {
7580
content: {},
7681
}),
7782
]);
83+
84+
statev12 = new RoomState(roomId);
85+
statev12.setStateEvents([
86+
...commonEvents,
87+
utils.mkEvent({
88+
// Room creation (v12 version)
89+
type: "m.room.create",
90+
user: userA,
91+
room: roomId,
92+
event: true,
93+
content: { room_version: "12" },
94+
}),
95+
]);
7896
});
7997

8098
describe("getMembers", function () {
@@ -859,6 +877,25 @@ describe("RoomState", function () {
859877
expect(state.maySendEvent("m.room.other_thing", userA)).toEqual(true);
860878
expect(state.maySendEvent("m.room.other_thing", userB)).toEqual(false);
861879
});
880+
881+
it("should recognise power level of room creators in v12 rooms", function () {
882+
const powerLevelEvent = new MatrixEvent({
883+
type: "m.room.power_levels",
884+
room_id: roomId,
885+
sender: userA,
886+
state_key: "",
887+
content: {
888+
users_default: 0,
889+
state_default: 100,
890+
events_default: 100,
891+
users: {
892+
},
893+
},
894+
});
895+
statev12.setStateEvents([powerLevelEvent]);
896+
897+
expect(statev12.maySendEvent("m.room.name", userA)).toEqual(true);
898+
});
862899
});
863900

864901
describe("processBeaconEvents", () => {

src/models/room-state.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,6 @@ export class RoomState extends TypedEventEmitter<EmittedEvents, EventHandlerMap>
925925

926926
let stateDefault = 0;
927927
let eventsDefault = 0;
928-
let powerLevel = 0;
929928
if (powerLevelsEvent) {
930929
powerLevels = powerLevelsEvent.getContent();
931930
eventsLevels = powerLevels.events || {};
@@ -936,13 +935,6 @@ export class RoomState extends TypedEventEmitter<EmittedEvents, EventHandlerMap>
936935
stateDefault = 50;
937936
}
938937

939-
const userPowerLevel = powerLevels.users && powerLevels.users[userId];
940-
if (Number.isSafeInteger(userPowerLevel)) {
941-
powerLevel = userPowerLevel!;
942-
} else if (Number.isSafeInteger(powerLevels.users_default)) {
943-
powerLevel = powerLevels.users_default!;
944-
}
945-
946938
if (Number.isSafeInteger(powerLevels.events_default)) {
947939
eventsDefault = powerLevels.events_default!;
948940
}
@@ -952,7 +944,11 @@ export class RoomState extends TypedEventEmitter<EmittedEvents, EventHandlerMap>
952944
if (Number.isSafeInteger(eventsLevels[eventType])) {
953945
requiredLevel = eventsLevels[eventType];
954946
}
955-
return powerLevel >= requiredLevel;
947+
948+
const roomMember = this.getMember(userId);
949+
const userPowerLevel = roomMember?.powerLevel ?? 0;
950+
951+
return userPowerLevel >= requiredLevel;
956952
}
957953

958954
/**

0 commit comments

Comments
 (0)