Merge pull request #5959 from element-hq/feature/fga/ban_moderation

Fix : iterate on unban permissions
This commit is contained in:
ganfra
2025-12-30 16:17:50 +01:00
committed by GitHub
3 changed files with 23 additions and 11 deletions

View File

@@ -26,7 +26,7 @@ data class RoomMemberListState(
val moderationState: RoomMemberModerationState,
val eventSink: (RoomMemberListEvents) -> Unit,
) {
val showBannedSection: Boolean = moderationState.permissions.hasAny && roomMembers.dataOrNull()?.banned?.isNotEmpty() == true
val showBannedSection: Boolean = moderationState.permissions.canBan && roomMembers.dataOrNull()?.banned?.isNotEmpty() == true
}
enum class SelectedSection {

View File

@@ -13,7 +13,8 @@ data class RoomMemberModerationPermissions(
val canKick: Boolean,
val canBan: Boolean,
) {
val hasAny = canKick || canBan
// Unban requires both kick and ban permission instead of a dedicated unban permission
val canUnban = canBan && canKick
companion object {
val DEFAULT = RoomMemberModerationPermissions(

View File

@@ -161,16 +161,27 @@ 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 -> {
if (permissions.canUnban) {
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()
}