diff --git a/bwi/LeaveRoom/LeaveRoomHelper.swift b/bwi/LeaveRoom/LeaveRoomHelper.swift index 71635f6df..019c11469 100644 --- a/bwi/LeaveRoom/LeaveRoomHelper.swift +++ b/bwi/LeaveRoom/LeaveRoomHelper.swift @@ -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