Merge pull request #5959 from element-hq/feature/fga/ban_moderation
Fix : iterate on unban permissions
This commit is contained in:
commit
aa4b10e53a
3 changed files with 23 additions and 11 deletions
|
|
@ -26,7 +26,7 @@ data class RoomMemberListState(
|
||||||
val moderationState: RoomMemberModerationState,
|
val moderationState: RoomMemberModerationState,
|
||||||
val eventSink: (RoomMemberListEvents) -> Unit,
|
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 {
|
enum class SelectedSection {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ data class RoomMemberModerationPermissions(
|
||||||
val canKick: Boolean,
|
val canKick: Boolean,
|
||||||
val canBan: 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 {
|
companion object {
|
||||||
val DEFAULT = RoomMemberModerationPermissions(
|
val DEFAULT = RoomMemberModerationPermissions(
|
||||||
|
|
|
||||||
|
|
@ -161,16 +161,27 @@ 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) {
|
if (permissions.canUnban) {
|
||||||
add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser))
|
add(ModerationActionState(action = ModerationAction.UnbanUser, isEnabled = canModerateThisUser))
|
||||||
} else if (membership != RoomMembershipState.LEAVE) {
|
}
|
||||||
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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue