You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffychat/lib/pangea/extensions/room_user_permissions_exten...

72 lines
2.1 KiB
Dart

part of "pangea_room_extension.dart";
extension UserPermissionsRoomExtension on Room {
// If there are no other admins, and at least one non-admin, return true
Future<bool> isOnlyAdmin() async {
if (!isRoomAdmin) {
return false;
}
final List<User> participants = await requestParticipants();
return ((participants
.where(
(e) =>
e.powerLevel == SpaceConstants.powerLevelOfAdmin &&
e.id != BotName.byEnvironment,
)
.toList()
.length) ==
1) &&
(participants
.where(
(e) =>
e.powerLevel < SpaceConstants.powerLevelOfAdmin &&
e.id != BotName.byEnvironment,
)
.toList())
.isNotEmpty;
}
bool isMadeByUser(String userId) =>
getState(EventTypes.RoomCreate)?.senderId == userId;
//if the user is an admin of the room or any immediate parent of the room
//Question: check parents of parents?
//check logic
bool get isSpaceAdmin {
if (isSpace) return isRoomAdmin;
for (final parent in pangeaSpaceParents) {
if (parent.isRoomAdmin) {
return true;
}
}
for (final parent in pangeaSpaceParents) {
for (final parent2 in parent.pangeaSpaceParents) {
if (parent2.isRoomAdmin) {
return true;
}
}
}
return false;
}
bool isUserRoomAdmin(String userId) => getParticipants().any(
(e) =>
e.id == userId && e.powerLevel == SpaceConstants.powerLevelOfAdmin,
);
bool get isRoomAdmin => ownPowerLevel == SpaceConstants.powerLevelOfAdmin;
// Overriding the default canSendEvent to check power levels
bool pangeaCanSendEvent(String eventType) {
final powerLevelsMap = getState(EventTypes.RoomPowerLevels)?.content;
if (powerLevelsMap == null) return 0 <= ownPowerLevel;
final pl = powerLevelsMap
.tryGetMap<String, dynamic>('events')
?.tryGet<int>(eventType) ??
100;
return ownPowerLevel >= pl;
}
}