refactor: Restrict canChangeStateEvent, canInvite and canSendEvent to joined users

This commit is contained in:
Christian Kußowski 2025-07-17 09:42:52 +02:00
parent e76593fc7c
commit 48f59f378d
No known key found for this signature in database
GPG Key ID: E067ECD60F1A0652
1 changed files with 10 additions and 4 deletions

View File

@ -1989,6 +1989,7 @@ class Room {
/// with possible overrides in `events`, if not present compares `ownPowerLevel` /// with possible overrides in `events`, if not present compares `ownPowerLevel`
/// with state_default /// with state_default
bool canChangeStateEvent(String action) { bool canChangeStateEvent(String action) {
if (membership != Membership.join) return false;
return powerForChangingStateEvent(action) <= ownPowerLevel; return powerForChangingStateEvent(action) <= ownPowerLevel;
} }
@ -2060,10 +2061,14 @@ class Room {
} }
/// The level required to invite a user. /// The level required to invite a user.
bool get canInvite => bool get canInvite {
(getState(EventTypes.RoomPowerLevels)?.content.tryGet<int>('invite') ?? if (membership != Membership.join) return false;
0) <= return (getState(EventTypes.RoomPowerLevels)
ownPowerLevel; ?.content
.tryGet<int>('invite') ??
0) <=
ownPowerLevel;
}
/// The level required to kick a user. /// The level required to kick a user.
bool get canKick => bool get canKick =>
@ -2094,6 +2099,7 @@ class Room {
/// The level required to send a certain event. Defaults to 0 if there is no /// The level required to send a certain event. Defaults to 0 if there is no
/// events_default set or there is no power level state in the room. /// events_default set or there is no power level state in the room.
bool canSendEvent(String eventType) { bool canSendEvent(String eventType) {
if (membership != Membership.join) return false;
final powerLevelsMap = getState(EventTypes.RoomPowerLevels)?.content; final powerLevelsMap = getState(EventTypes.RoomPowerLevels)?.content;
final pl = powerLevelsMap final pl = powerLevelsMap