fix: unban action requires both ban and kick permissions

This commit is contained in:
ganfra 2025-12-23 14:36:19 +01:00
parent 60fa76a9b9
commit f732aa18a8

View file

@ -161,16 +161,28 @@ class RoomMemberModerationPresenter(
val canModerateThisUser = currentUserPowerLevel > targetMemberPowerLevel val canModerateThisUser = currentUserPowerLevel > targetMemberPowerLevel
// Assume the member is joined when it's unknown // Assume the member is joined when it's unknown
val membership = member?.membership ?: RoomMembershipState.JOIN val membership = member?.membership ?: RoomMembershipState.JOIN
if (permissions.canKick) { when (membership) {
// Unban requires kick permission instead of a dedicated unban permission RoomMembershipState.BAN -> {
if (membership == RoomMembershipState.BAN) { // Unban requires both kick and ban permission instead of a dedicated unban permission
add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser)) if (permissions.canBan && permissions.canKick) {
} else if (membership != RoomMembershipState.LEAVE) { add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser))
add(ModerationActionState(action = ModerationAction.KickUser, 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() }.toImmutableList()
} }