feat: last admin works with owners (MESSENGER-7561)

This commit is contained in:
Frank Rotermund
2025-09-19 14:23:45 +02:00
parent b819783abf
commit 39c7df88a1

View File

@@ -30,11 +30,16 @@ final class LeaveRoomHelper {
var canLeave = false
var hasInvites = false
// admins can only leave if there is at least one other admin
// bwi #7561 add differenciation for admin and owner
let myPowerLevel = self.powerLevel(session.myUserId, room)
// admins can only leave if there is at least one other admin or owner
// owners can only leave if there is another owner
room.state { (state) in
if let members = state?.members.joinedMembers {
for user in members where user.userId != myUserId {
if self.isAdmin(user.userId, room) {
if self.powerLevel(user.userId, room) >= myPowerLevel
{
canLeave = true
break
}
@@ -52,6 +57,16 @@ final class LeaveRoomHelper {
return canLeave
}
static private func powerLevel(_ userId: String, _ room: MXRoom) -> Int {
var powerLevel: Int = 0
room.state { (state) in
powerLevel = state?.powerLevelOfUser(withUserID: userId) ?? 0
}
return powerLevel
}
static private func isAdmin(_ userId: String, _ room: MXRoom) -> Bool {
var admin = false