Merge pull request #2117 from famedly/krille/restrict-can-send-event-to-joined-users
Krille/restrict can send event to joined users
This commit is contained in:
commit
092eb0a931
|
|
@ -1980,15 +1980,18 @@ class Room {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The level required to ban a user.
|
/// The level required to ban a user.
|
||||||
bool get canBan =>
|
bool get canBan {
|
||||||
(getState(EventTypes.RoomPowerLevels)?.content.tryGet<int>('ban') ??
|
if (membership != Membership.join) return false;
|
||||||
50) <=
|
return (getState(EventTypes.RoomPowerLevels)?.content.tryGet<int>('ban') ??
|
||||||
ownPowerLevel;
|
50) <=
|
||||||
|
ownPowerLevel;
|
||||||
|
}
|
||||||
|
|
||||||
/// returns if user can change a particular state event by comparing `ownPowerLevel`
|
/// returns if user can change a particular state event by comparing `ownPowerLevel`
|
||||||
/// 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,22 +2063,32 @@ 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 {
|
||||||
(getState(EventTypes.RoomPowerLevels)?.content.tryGet<int>('kick') ??
|
if (membership != Membership.join) return false;
|
||||||
50) <=
|
return (getState(EventTypes.RoomPowerLevels)?.content.tryGet<int>('kick') ??
|
||||||
ownPowerLevel;
|
50) <=
|
||||||
|
ownPowerLevel;
|
||||||
|
}
|
||||||
|
|
||||||
/// The level required to redact an event.
|
/// The level required to redact an event.
|
||||||
bool get canRedact =>
|
bool get canRedact {
|
||||||
(getState(EventTypes.RoomPowerLevels)?.content.tryGet<int>('redact') ??
|
if (membership != Membership.join) return false;
|
||||||
50) <=
|
return (getState(EventTypes.RoomPowerLevels)
|
||||||
ownPowerLevel;
|
?.content
|
||||||
|
.tryGet<int>('redact') ??
|
||||||
|
50) <=
|
||||||
|
ownPowerLevel;
|
||||||
|
}
|
||||||
|
|
||||||
/// The default level required to send state events. Can be overridden by the events key.
|
/// The default level required to send state events. Can be overridden by the events key.
|
||||||
bool get canSendDefaultStates {
|
bool get canSendDefaultStates {
|
||||||
|
|
@ -2094,6 +2107,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
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,9 @@ class Timeline {
|
||||||
bool _fetchedAllDatabaseEvents = false;
|
bool _fetchedAllDatabaseEvents = false;
|
||||||
|
|
||||||
bool get canRequestHistory {
|
bool get canRequestHistory {
|
||||||
|
if (!{Membership.join, Membership.leave}.contains(room.membership)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (events.isEmpty) return true;
|
if (events.isEmpty) return true;
|
||||||
return !_fetchedAllDatabaseEvents ||
|
return !_fetchedAllDatabaseEvents ||
|
||||||
(room.prev_batch != null && events.last.type != EventTypes.RoomCreate);
|
(room.prev_batch != null && events.last.type != EventTypes.RoomCreate);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue