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
|
||||||
|
istalri marked this conversation as resolved
Outdated
|
|||||||
final userLevel = roomCreators?.contains(user) == true
|
final userLevel = roomCreators?.contains(user) == true
|
||||||
? null
|
? double.infinity
|
||||||
|
istalri marked this conversation as resolved
Outdated
Henry-Hiles
commented
Better to set this to Better to set this to `double.infinity`. Then you shouldn't need to touch the logic below.
|
|||||||
: 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();
|
||||||
|
istalri marked this conversation as resolved
Outdated
Henry-Hiles
commented
I think it's best to make this function/controller/provider return I think it's best to make this function/controller/provider return `IList<String>`, and return a `.new()` instead of null.
|
|||||||
|
|
||||||
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]),
|
||||||
|
istalri marked this conversation as resolved
Outdated
Henry-Hiles
commented
A little cleaner:
A little cleaner:
```diff
- [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
Also when you leave comments please put a space between
//and the first word :)