From afaa3698857ebc1d4083243069eae2e67683995a Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 23 Dec 2025 14:36:19 +0100 Subject: [PATCH] fix: unban action requires both ban and kick permissions --- .../impl/RoomMemberModerationPresenter.kt | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt index cfb9412394..3a5c364b31 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt @@ -161,16 +161,28 @@ class RoomMemberModerationPresenter( val canModerateThisUser = currentUserPowerLevel > targetMemberPowerLevel // Assume the member is joined when it's unknown val membership = member?.membership ?: RoomMembershipState.JOIN - if (permissions.canKick) { - // Unban requires kick permission instead of a dedicated unban permission - if (membership == RoomMembershipState.BAN) { - add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser)) - } else if (membership != RoomMembershipState.LEAVE) { - add(ModerationActionState(action = ModerationAction.KickUser, isEnabled = canModerateThisUser)) + when (membership) { + RoomMembershipState.BAN -> { + // Unban requires both kick and ban permission instead of a dedicated unban permission + if (permissions.canBan && permissions.canKick) { + add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser)) + } + } + RoomMembershipState.INVITE, + RoomMembershipState.JOIN, + RoomMembershipState.KNOCK -> { + if (permissions.canKick) { + add(ModerationActionState(action = ModerationAction.KickUser, isEnabled = canModerateThisUser)) + } + if (permissions.canBan) { + add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser)) + } + } + RoomMembershipState.LEAVE -> { + if (permissions.canBan) { + add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser)) + } } - } - if (permissions.canBan && membership != RoomMembershipState.BAN) { - add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser)) } }.toImmutableList() }