Skip to content

Commit 3973616

Browse files
authored
Merge pull request #5959 from element-hq/feature/fga/ban_moderation
Fix : iterate on unban permissions
2 parents 5ced2cc + 2fa4994 commit 3973616

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ data class RoomMemberListState(
2626
val moderationState: RoomMemberModerationState,
2727
val eventSink: (RoomMemberListEvents) -> Unit,
2828
) {
29-
val showBannedSection: Boolean = moderationState.permissions.hasAny && roomMembers.dataOrNull()?.banned?.isNotEmpty() == true
29+
val showBannedSection: Boolean = moderationState.permissions.canBan && roomMembers.dataOrNull()?.banned?.isNotEmpty() == true
3030
}
3131

3232
enum class SelectedSection {

features/roommembermoderation/api/src/main/kotlin/io/element/android/features/roommembermoderation/api/RoomMemberModerationPermissions.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ data class RoomMemberModerationPermissions(
1313
val canKick: Boolean,
1414
val canBan: Boolean,
1515
) {
16-
val hasAny = canKick || canBan
16+
// Unban requires both kick and ban permission instead of a dedicated unban permission
17+
val canUnban = canBan && canKick
1718

1819
companion object {
1920
val DEFAULT = RoomMemberModerationPermissions(

features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,16 +161,27 @@ class RoomMemberModerationPresenter(
161161
val canModerateThisUser = currentUserPowerLevel > targetMemberPowerLevel
162162
// Assume the member is joined when it's unknown
163163
val membership = member?.membership ?: RoomMembershipState.JOIN
164-
if (permissions.canKick) {
165-
// Unban requires kick permission instead of a dedicated unban permission
166-
if (membership == RoomMembershipState.BAN) {
167-
add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser))
168-
} else if (membership != RoomMembershipState.LEAVE) {
169-
add(ModerationActionState(action = ModerationAction.KickUser, isEnabled = canModerateThisUser))
164+
when (membership) {
165+
RoomMembershipState.BAN -> {
166+
if (permissions.canUnban) {
167+
add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser))
168+
}
169+
}
170+
RoomMembershipState.INVITE,
171+
RoomMembershipState.JOIN,
172+
RoomMembershipState.KNOCK -> {
173+
if (permissions.canKick) {
174+
add(ModerationActionState(action = ModerationAction.KickUser, isEnabled = canModerateThisUser))
175+
}
176+
if (permissions.canBan) {
177+
add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser))
178+
}
179+
}
180+
RoomMembershipState.LEAVE -> {
181+
if (permissions.canBan) {
182+
add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser))
183+
}
170184
}
171-
}
172-
if (permissions.canBan && membership != RoomMembershipState.BAN) {
173-
add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser))
174185
}
175186
}.toImmutableList()
176187
}

0 commit comments

Comments
 (0)