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
|
||||
|
istalri marked this conversation as resolved
Outdated
|
||||
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);
|
||||
|
||||
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();
|
||||
|
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) {
|
||||
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]),
|
||||
|
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 =
|
||||
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
Also when you leave comments please put a space between
//and the first word :)