Take into account creators when checking power levels #44
2 changed files with 18 additions and 32 deletions
Clean Up
double.infinity instead of null is clearer in it's intend non nullable IList is also clearer fix comment to reflect changes
commit
a13d850a27
|
|
@ -42,51 +42,37 @@ class PowerLevelController extends Notifier<bool> {
|
|||
int powerLevelOf(String userId) =>
|
||||
content.users[userId] ?? content.usersDefault;
|
||||
|
||||
//Creators get power level infinite, here marked with null
|
||||
// room creators get power level infinite
|
||||
final userLevel = roomCreators?.contains(user) == true
|
||||
? null
|
||||
? double.infinity
|
||||
: powerLevelOf(user);
|
||||
|
||||
return switch (config) {
|
||||
EventPowerLevelConfig(:final eventType) =>
|
||||
userLevel == null
|
||||
? true
|
||||
: (userLevel >=
|
||||
(content.events[eventType.type] ?? content.eventsDefault)),
|
||||
userLevel >= (content.events[eventType.type] ?? content.eventsDefault),
|
||||
|
||||
MembershipActionPowerLevelConfig(:final action, :final targetUser) =>
|
||||
switch (action) {
|
||||
.invite => userLevel == null ? true : (userLevel >= content.invite),
|
||||
.invite => userLevel >= content.invite,
|
||||
|
||||
.kick =>
|
||||
userLevel == null
|
||||
? true
|
||||
: (userLevel >= content.kick &&
|
||||
userLevel > powerLevelOf(targetUser)),
|
||||
userLevel >= content.kick && userLevel > powerLevelOf(targetUser),
|
||||
|
||||
.ban =>
|
||||
userLevel == null
|
||||
? true
|
||||
: (userLevel >= content.ban &&
|
||||
userLevel > powerLevelOf(targetUser)),
|
||||
userLevel >= content.ban && userLevel > powerLevelOf(targetUser),
|
||||
|
||||
.unban => userLevel == null ? true : (userLevel >= content.ban),
|
||||
.unban => userLevel >= content.ban,
|
||||
},
|
||||
|
||||
StatePowerLevelConfig(:final eventType) =>
|
||||
userLevel == null
|
||||
? true
|
||||
: (userLevel >=
|
||||
(content.events[eventType.type] ?? content.stateDefault)),
|
||||
userLevel >= (content.events[eventType.type] ?? content.stateDefault),
|
||||
|
||||
RedactionPowerLevelConfig(:final targetUser) =>
|
||||
userLevel == null
|
||||
? true
|
||||
: (userLevel >=
|
||||
(targetUser == user
|
||||
? (content.events[EventType.redaction.type] ??
|
||||
content.eventsDefault)
|
||||
: content.redact)),
|
||||
userLevel >=
|
||||
(targetUser == user
|
||||
? (content.events[EventType.redaction.type] ??
|
||||
content.eventsDefault)
|
||||
: content.redact),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,16 +4,16 @@ import "package:nexus/models/content/content.dart";
|
|||
import "package:nexus/models/content/create.dart";
|
||||
import "package:nexus/models/room.dart";
|
||||
|
||||
class RoomCreatorsController extends Notifier<IList<String>?> {
|
||||
class RoomCreatorsController extends Notifier<IList<String>> {
|
||||
final Room room;
|
||||
RoomCreatorsController(this.room);
|
||||
|
||||
@override
|
||||
IList<String>? build() {
|
||||
IList<String> build() {
|
||||
final createRowId = room.state[EventType.create.type]?[""];
|
||||
final createEvent = createRowId == null ? null : room.events[createRowId];
|
||||
|
||||
if (createEvent == null) return null;
|
||||
if (createEvent == null) return .new();
|
||||
|
||||
final createEventContent = switch (createEvent.content) {
|
||||
CreateContent content => content,
|
||||
|
|
@ -22,12 +22,12 @@ class RoomCreatorsController extends Notifier<IList<String>?> {
|
|||
|
||||
return switch (createEventContent?.additionalCreatorIds) {
|
||||
IList<String> creators => creators.add(createEvent.sender),
|
||||
_ => [createEvent.sender].toIList(),
|
||||
_ => .new([createEvent.sender]),
|
||||
};
|
||||
}
|
||||
|
||||
static final provider =
|
||||
NotifierProvider.family<RoomCreatorsController, IList<String>?, Room>(
|
||||
NotifierProvider.family<RoomCreatorsController, IList<String>, Room>(
|
||||
RoomCreatorsController.new,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue