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) =>
|
int powerLevelOf(String userId) =>
|
||||||
content.users[userId] ?? content.usersDefault;
|
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
|
final userLevel = roomCreators?.contains(user) == true
|
||||||
? null
|
? double.infinity
|
||||||
: powerLevelOf(user);
|
: powerLevelOf(user);
|
||||||
|
|
||||||
return switch (config) {
|
return switch (config) {
|
||||||
EventPowerLevelConfig(:final eventType) =>
|
EventPowerLevelConfig(:final eventType) =>
|
||||||
userLevel == null
|
userLevel >= (content.events[eventType.type] ?? content.eventsDefault),
|
||||||
? true
|
|
||||||
: (userLevel >=
|
|
||||||
(content.events[eventType.type] ?? content.eventsDefault)),
|
|
||||||
|
|
||||||
MembershipActionPowerLevelConfig(:final action, :final targetUser) =>
|
MembershipActionPowerLevelConfig(:final action, :final targetUser) =>
|
||||||
switch (action) {
|
switch (action) {
|
||||||
.invite => userLevel == null ? true : (userLevel >= content.invite),
|
.invite => userLevel >= content.invite,
|
||||||
|
|
||||||
.kick =>
|
.kick =>
|
||||||
userLevel == null
|
userLevel >= content.kick && userLevel > powerLevelOf(targetUser),
|
||||||
? true
|
|
||||||
: (userLevel >= content.kick &&
|
|
||||||
userLevel > powerLevelOf(targetUser)),
|
|
||||||
|
|
||||||
.ban =>
|
.ban =>
|
||||||
userLevel == null
|
userLevel >= content.ban && userLevel > powerLevelOf(targetUser),
|
||||||
? true
|
|
||||||
: (userLevel >= content.ban &&
|
|
||||||
userLevel > powerLevelOf(targetUser)),
|
|
||||||
|
|
||||||
.unban => userLevel == null ? true : (userLevel >= content.ban),
|
.unban => userLevel >= content.ban,
|
||||||
},
|
},
|
||||||
|
|
||||||
StatePowerLevelConfig(:final eventType) =>
|
StatePowerLevelConfig(:final eventType) =>
|
||||||
userLevel == null
|
userLevel >= (content.events[eventType.type] ?? content.stateDefault),
|
||||||
? true
|
|
||||||
: (userLevel >=
|
|
||||||
(content.events[eventType.type] ?? content.stateDefault)),
|
|
||||||
|
|
||||||
RedactionPowerLevelConfig(:final targetUser) =>
|
RedactionPowerLevelConfig(:final targetUser) =>
|
||||||
userLevel == null
|
userLevel >=
|
||||||
? true
|
(targetUser == user
|
||||||
: (userLevel >=
|
? (content.events[EventType.redaction.type] ??
|
||||||
(targetUser == user
|
content.eventsDefault)
|
||||||
? (content.events[EventType.redaction.type] ??
|
: content.redact),
|
||||||
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/content/create.dart";
|
||||||
import "package:nexus/models/room.dart";
|
import "package:nexus/models/room.dart";
|
||||||
|
|
||||||
class RoomCreatorsController extends Notifier<IList<String>?> {
|
class RoomCreatorsController extends Notifier<IList<String>> {
|
||||||
final Room room;
|
final Room room;
|
||||||
RoomCreatorsController(this.room);
|
RoomCreatorsController(this.room);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
IList<String>? build() {
|
IList<String> build() {
|
||||||
final createRowId = room.state[EventType.create.type]?[""];
|
final createRowId = room.state[EventType.create.type]?[""];
|
||||||
final createEvent = createRowId == null ? null : room.events[createRowId];
|
final createEvent = createRowId == null ? null : room.events[createRowId];
|
||||||
|
|
||||||
if (createEvent == null) return null;
|
if (createEvent == null) return .new();
|
||||||
|
|
||||||
final createEventContent = switch (createEvent.content) {
|
final createEventContent = switch (createEvent.content) {
|
||||||
CreateContent content => content,
|
CreateContent content => content,
|
||||||
|
|
@ -22,12 +22,12 @@ class RoomCreatorsController extends Notifier<IList<String>?> {
|
||||||
|
|
||||||
return switch (createEventContent?.additionalCreatorIds) {
|
return switch (createEventContent?.additionalCreatorIds) {
|
||||||
IList<String> creators => creators.add(createEvent.sender),
|
IList<String> creators => creators.add(createEvent.sender),
|
||||||
_ => [createEvent.sender].toIList(),
|
_ => .new([createEvent.sender]),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static final provider =
|
static final provider =
|
||||||
NotifierProvider.family<RoomCreatorsController, IList<String>?, Room>(
|
NotifierProvider.family<RoomCreatorsController, IList<String>, Room>(
|
||||||
RoomCreatorsController.new,
|
RoomCreatorsController.new,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue