Move canEditSpaceGraph out of SettingsPermissions to his own Permissions
This commit is contained in:
parent
8dc7caa737
commit
e7789ef869
3 changed files with 36 additions and 7 deletions
|
|
@ -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),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -92,8 +92,8 @@ class SpacePresenter(
|
||||||
}
|
}
|
||||||
}.collectAsState()
|
}.collectAsState()
|
||||||
|
|
||||||
val permissions by room.permissionsAsState(SpaceSettingsPermissions.DEFAULT) { perms ->
|
val permissions by room.permissionsAsState(SpacePermissions.DEFAULT) { perms ->
|
||||||
perms.spaceSettingsPermissions()
|
perms.spacePermissions()
|
||||||
}
|
}
|
||||||
val isSpaceSettingsEnabled by remember {
|
val isSpaceSettingsEnabled by remember {
|
||||||
featureFlagService.isFeatureEnabledFlow(FeatureFlags.SpaceSettings)
|
featureFlagService.isFeatureEnabledFlow(FeatureFlags.SpaceSettings)
|
||||||
|
|
@ -101,7 +101,7 @@ class SpacePresenter(
|
||||||
|
|
||||||
val roomInfo by room.roomInfoFlow.collectAsState()
|
val roomInfo by room.roomInfoFlow.collectAsState()
|
||||||
val canAccessSpaceSettings by remember {
|
val canAccessSpaceSettings by remember {
|
||||||
derivedStateOf { isSpaceSettingsEnabled && permissions.hasAny(roomInfo.joinRule) }
|
derivedStateOf { isSpaceSettingsEnabled && permissions.settingsPermissions.hasAny(roomInfo.joinRule) }
|
||||||
}
|
}
|
||||||
val currentSpace by spaceRoomList.currentSpaceFlow.collectAsState()
|
val currentSpace by spaceRoomList.currentSpaceFlow.collectAsState()
|
||||||
val (joinActions, setJoinActions) = remember { mutableStateOf(emptyMap<RoomId, AsyncAction<Unit>>()) }
|
val (joinActions, setJoinActions) = remember { mutableStateOf(emptyMap<RoomId, AsyncAction<Unit>>()) }
|
||||||
|
|
|
||||||
|
|
@ -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.roomdetailsedit.api.roomDetailsEditPermissions
|
||||||
import io.element.android.features.securityandprivacy.api.SecurityAndPrivacyPermissions
|
import io.element.android.features.securityandprivacy.api.SecurityAndPrivacyPermissions
|
||||||
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.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions
|
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions
|
||||||
import io.element.android.libraries.matrix.api.room.powerlevels.canEditRolesAndPermissions
|
import io.element.android.libraries.matrix.api.room.powerlevels.canEditRolesAndPermissions
|
||||||
|
|
@ -20,7 +19,6 @@ data class SpaceSettingsPermissions(
|
||||||
val editDetailsPermissions: RoomDetailsEditPermissions,
|
val editDetailsPermissions: RoomDetailsEditPermissions,
|
||||||
val canEditRolesAndPermissions: Boolean,
|
val canEditRolesAndPermissions: Boolean,
|
||||||
val securityAndPrivacyPermissions: SecurityAndPrivacyPermissions,
|
val securityAndPrivacyPermissions: SecurityAndPrivacyPermissions,
|
||||||
val canEditSpaceGraph: Boolean,
|
|
||||||
) {
|
) {
|
||||||
fun hasAny(joinRule: JoinRule?): Boolean {
|
fun hasAny(joinRule: JoinRule?): Boolean {
|
||||||
return editDetailsPermissions.hasAny ||
|
return editDetailsPermissions.hasAny ||
|
||||||
|
|
@ -33,7 +31,6 @@ data class SpaceSettingsPermissions(
|
||||||
editDetailsPermissions = RoomDetailsEditPermissions.DEFAULT,
|
editDetailsPermissions = RoomDetailsEditPermissions.DEFAULT,
|
||||||
canEditRolesAndPermissions = false,
|
canEditRolesAndPermissions = false,
|
||||||
securityAndPrivacyPermissions = SecurityAndPrivacyPermissions.DEFAULT,
|
securityAndPrivacyPermissions = SecurityAndPrivacyPermissions.DEFAULT,
|
||||||
canEditSpaceGraph = false,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -43,6 +40,5 @@ fun RoomPermissions.spaceSettingsPermissions(): SpaceSettingsPermissions {
|
||||||
editDetailsPermissions = roomDetailsEditPermissions(),
|
editDetailsPermissions = roomDetailsEditPermissions(),
|
||||||
canEditRolesAndPermissions = canEditRolesAndPermissions(),
|
canEditRolesAndPermissions = canEditRolesAndPermissions(),
|
||||||
securityAndPrivacyPermissions = securityAndPrivacyPermissions(),
|
securityAndPrivacyPermissions = securityAndPrivacyPermissions(),
|
||||||
canEditSpaceGraph = canOwnUserSendState(StateEventType.SpaceChild) || canOwnUserSendState(StateEventType.SpaceParent),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue