Merge pull request #5959 from element-hq/feature/fga/ban_moderation
Fix : iterate on unban permissions
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user