Move canEditSpaceGraph out of SettingsPermissions to his own Permissions

This commit is contained in:
ganfra
2026-01-15 16:41:33 +01:00
parent 02efe0706e
commit b560b0443e
3 changed files with 36 additions and 7 deletions

View File

@@ -0,0 +1,33 @@
/*
* Copyright (c) 2026 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.space.impl.root
import io.element.android.features.space.impl.settings.SpaceSettingsPermissions
import io.element.android.features.space.impl.settings.spaceSettingsPermissions
import io.element.android.libraries.matrix.api.room.StateEventType
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions
data class SpacePermissions(
val settingsPermissions: SpaceSettingsPermissions,
val canEditSpaceGraph: Boolean,
) {
companion object {
val DEFAULT = SpacePermissions(
settingsPermissions = SpaceSettingsPermissions.DEFAULT,
canEditSpaceGraph = false,
)
}
}
fun RoomPermissions.spacePermissions(): SpacePermissions {
return SpacePermissions(
settingsPermissions = spaceSettingsPermissions(),
canEditSpaceGraph = canOwnUserSendState(StateEventType.SpaceChild) || canOwnUserSendState(StateEventType.SpaceParent),
)
}

View File

@@ -92,8 +92,8 @@ class SpacePresenter(
}
}.collectAsState()
val permissions by room.permissionsAsState(SpaceSettingsPermissions.DEFAULT) { perms ->
perms.spaceSettingsPermissions()
val permissions by room.permissionsAsState(SpacePermissions.DEFAULT) { perms ->
perms.spacePermissions()
}
val isSpaceSettingsEnabled by remember {
featureFlagService.isFeatureEnabledFlow(FeatureFlags.SpaceSettings)
@@ -101,7 +101,7 @@ class SpacePresenter(
val roomInfo by room.roomInfoFlow.collectAsState()
val canAccessSpaceSettings by remember {
derivedStateOf { isSpaceSettingsEnabled && permissions.hasAny(roomInfo.joinRule) }
derivedStateOf { isSpaceSettingsEnabled && permissions.settingsPermissions.hasAny(roomInfo.joinRule) }
}
val currentSpace by spaceRoomList.currentSpaceFlow.collectAsState()
val (joinActions, setJoinActions) = remember { mutableStateOf(emptyMap<RoomId, AsyncAction<Unit>>()) }

View File

@@ -11,7 +11,6 @@ import io.element.android.features.roomdetailsedit.api.RoomDetailsEditPermission
import io.element.android.features.roomdetailsedit.api.roomDetailsEditPermissions
import io.element.android.features.securityandprivacy.api.SecurityAndPrivacyPermissions
import io.element.android.features.securityandprivacy.api.securityAndPrivacyPermissions
import io.element.android.libraries.matrix.api.room.StateEventType
import io.element.android.libraries.matrix.api.room.join.JoinRule
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions
import io.element.android.libraries.matrix.api.room.powerlevels.canEditRolesAndPermissions
@@ -20,7 +19,6 @@ data class SpaceSettingsPermissions(
val editDetailsPermissions: RoomDetailsEditPermissions,
val canEditRolesAndPermissions: Boolean,
val securityAndPrivacyPermissions: SecurityAndPrivacyPermissions,
val canEditSpaceGraph: Boolean,
) {
fun hasAny(joinRule: JoinRule?): Boolean {
return editDetailsPermissions.hasAny ||
@@ -33,7 +31,6 @@ data class SpaceSettingsPermissions(
editDetailsPermissions = RoomDetailsEditPermissions.DEFAULT,
canEditRolesAndPermissions = false,
securityAndPrivacyPermissions = SecurityAndPrivacyPermissions.DEFAULT,
canEditSpaceGraph = false,
)
}
}
@@ -43,6 +40,5 @@ fun RoomPermissions.spaceSettingsPermissions(): SpaceSettingsPermissions {
editDetailsPermissions = roomDetailsEditPermissions(),
canEditRolesAndPermissions = canEditRolesAndPermissions(),
securityAndPrivacyPermissions = securityAndPrivacyPermissions(),
canEditSpaceGraph = canOwnUserSendState(StateEventType.SpaceChild) || canOwnUserSendState(StateEventType.SpaceParent),
)
}