mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-16 16:47:24 +00:00
fix(@desktop/permissions): Hide permissions list in sharing addresses dialog if only base permissions are set
Fix #12884
This commit is contained in:
parent
edf7e82932
commit
46c69cf0a8
@ -60,7 +60,7 @@ type
|
|||||||
type
|
type
|
||||||
JoiningCommunityDetails = object
|
JoiningCommunityDetails = object
|
||||||
communityId: string
|
communityId: string
|
||||||
communityIdForChannelsPermisisons: string
|
communityIdForPermissions: string
|
||||||
communityIdForRevealedAccounts: string
|
communityIdForRevealedAccounts: string
|
||||||
ensName: string
|
ensName: string
|
||||||
addressesToShare: OrderedTable[string, AddressToShareDetails] ## [address, AddressToShareDetails]
|
addressesToShare: OrderedTable[string, AddressToShareDetails] ## [address, AddressToShareDetails]
|
||||||
@ -818,9 +818,14 @@ method getCommunityPublicKeyFromPrivateKey*(self: Module, communityPrivateKey: s
|
|||||||
result = self.controller.getCommunityPublicKeyFromPrivateKey(communityPrivateKey)
|
result = self.controller.getCommunityPublicKeyFromPrivateKey(communityPrivateKey)
|
||||||
|
|
||||||
method checkPermissions*(self: Module, communityId: string, sharedAddresses: seq[string]) =
|
method checkPermissions*(self: Module, communityId: string, sharedAddresses: seq[string]) =
|
||||||
self.joiningCommunityDetails.communityIdForChannelsPermisisons = communityId
|
self.joiningCommunityDetails.communityIdForPermissions = communityId
|
||||||
|
|
||||||
self.controller.asyncCheckPermissionsToJoin(communityId, sharedAddresses)
|
self.controller.asyncCheckPermissionsToJoin(communityId, sharedAddresses)
|
||||||
|
self.checkingPermissionToJoinInProgress = true
|
||||||
|
|
||||||
self.controller.asyncCheckAllChannelsPermissions(communityId, sharedAddresses)
|
self.controller.asyncCheckAllChannelsPermissions(communityId, sharedAddresses)
|
||||||
|
self.checkingAllChannelPermissionsInProgress = true
|
||||||
|
|
||||||
self.view.setCheckingPermissionsInProgress(inProgress = true)
|
self.view.setCheckingPermissionsInProgress(inProgress = true)
|
||||||
|
|
||||||
method prepareTokenModelForCommunity*(self: Module, communityId: string) =
|
method prepareTokenModelForCommunity*(self: Module, communityId: string) =
|
||||||
@ -898,7 +903,8 @@ method onCommunityCheckAllChannelPermissionsFailed*(self: Module, communityId: s
|
|||||||
|
|
||||||
method onCommunityCheckPermissionsToJoinResponse*(self: Module, communityId: string,
|
method onCommunityCheckPermissionsToJoinResponse*(self: Module, communityId: string,
|
||||||
checkPermissionsToJoinResponse: CheckPermissionsToJoinResponseDto) =
|
checkPermissionsToJoinResponse: CheckPermissionsToJoinResponseDto) =
|
||||||
if self.joiningCommunityDetails.communityId != communityId:
|
if not self.checkingPermissionToJoinInProgress and
|
||||||
|
self.joiningCommunityDetails.communityIdForPermissions != communityId:
|
||||||
return
|
return
|
||||||
self.applyPermissionResponse(communityId, checkPermissionsToJoinResponse.permissions)
|
self.applyPermissionResponse(communityId, checkPermissionsToJoinResponse.permissions)
|
||||||
self.checkingPermissionToJoinInProgress = false
|
self.checkingPermissionToJoinInProgress = false
|
||||||
@ -906,7 +912,8 @@ method onCommunityCheckPermissionsToJoinResponse*(self: Module, communityId: str
|
|||||||
|
|
||||||
method onCommunityCheckAllChannelsPermissionsResponse*(self: Module, communityId: string,
|
method onCommunityCheckAllChannelsPermissionsResponse*(self: Module, communityId: string,
|
||||||
checkChannelPermissionsResponse: CheckAllChannelsPermissionsResponseDto) =
|
checkChannelPermissionsResponse: CheckAllChannelsPermissionsResponseDto) =
|
||||||
if self.joiningCommunityDetails.communityIdForChannelsPermisisons != communityId:
|
if not self.checkingAllChannelPermissionsInProgress and
|
||||||
|
self.joiningCommunityDetails.communityIdForPermissions != communityId:
|
||||||
return
|
return
|
||||||
self.checkingAllChannelPermissionsInProgress = false
|
self.checkingAllChannelPermissionsInProgress = false
|
||||||
self.updateCheckingPermissionsInProgressIfNeeded(inProgress = false)
|
self.updateCheckingPermissionsInProgressIfNeeded(inProgress = false)
|
||||||
|
@ -20,7 +20,10 @@ proc `$`*(self: TokenPermissionItem): string =
|
|||||||
result = fmt"""TokenPermissionItem(
|
result = fmt"""TokenPermissionItem(
|
||||||
id: {self.id},
|
id: {self.id},
|
||||||
type: {self.type},
|
type: {self.type},
|
||||||
]"""
|
isPrivate: {self.isPrivate},
|
||||||
|
tokenCriteriaMet: {self.tokenCriteriaMet},
|
||||||
|
state: {self.state}
|
||||||
|
)"""
|
||||||
|
|
||||||
proc initTokenPermissionItem*(
|
proc initTokenPermissionItem*(
|
||||||
id: string,
|
id: string,
|
||||||
|
@ -1550,7 +1550,6 @@ QtObject:
|
|||||||
raise newException(RpcException, error.message)
|
raise newException(RpcException, error.message)
|
||||||
|
|
||||||
let checkPermissionsToJoinResponse = rpcResponseObj["response"]["result"].toCheckPermissionsToJoinResponseDto
|
let checkPermissionsToJoinResponse = rpcResponseObj["response"]["result"].toCheckPermissionsToJoinResponseDto
|
||||||
|
|
||||||
self.events.emit(SIGNAL_CHECK_PERMISSIONS_TO_JOIN_RESPONSE, CheckPermissionsToJoinResponseArgs(
|
self.events.emit(SIGNAL_CHECK_PERMISSIONS_TO_JOIN_RESPONSE, CheckPermissionsToJoinResponseArgs(
|
||||||
communityId: communityId,
|
communityId: communityId,
|
||||||
checkPermissionsToJoinResponse: checkPermissionsToJoinResponse
|
checkPermissionsToJoinResponse: checkPermissionsToJoinResponse
|
||||||
|
@ -215,7 +215,7 @@ Control {
|
|||||||
radius: Style.current.padding
|
radius: Style.current.padding
|
||||||
border.width: 1
|
border.width: 1
|
||||||
border.color: Theme.palette.baseColor3
|
border.color: Theme.palette.baseColor3
|
||||||
visible: d.hasPermissions
|
visible: permissionsView.hasAnyVisiblePermission
|
||||||
|
|
||||||
layer.enabled: true
|
layer.enabled: true
|
||||||
layer.effect: DropShadow {
|
layer.effect: DropShadow {
|
||||||
@ -240,7 +240,7 @@ Control {
|
|||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: -Style.current.padding // compensate for the half-rounded divider above
|
Layout.topMargin: -Style.current.padding // compensate for the half-rounded divider above
|
||||||
visible: d.hasPermissions
|
visible: permissionsView.hasAnyVisiblePermission
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,10 @@ Rectangle {
|
|||||||
implicitHeight: permissionsScrollView.contentHeight - permissionsScrollView.anchors.topMargin
|
implicitHeight: permissionsScrollView.contentHeight - permissionsScrollView.anchors.topMargin
|
||||||
color: Theme.palette.baseColor2
|
color: Theme.palette.baseColor2
|
||||||
|
|
||||||
|
readonly property bool hasAnyVisiblePermission: root.permissionsModel && root.permissionsModel.count &&
|
||||||
|
(d.tokenMasterPermissionsModel.count > 0 || d.adminPermissionsModel.count > 0 ||
|
||||||
|
d.joinPermissionsModel.count > 0 || d.channelsPermissionsModel.count > 0)
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
id: d
|
id: d
|
||||||
|
|
||||||
@ -62,12 +66,23 @@ Rectangle {
|
|||||||
readonly property bool lostChannelPermissions: root.isEditMode && d.uniquePermissionChannels.length > 0 && channelPermissionsPanel.anyPermissionLost
|
readonly property bool lostChannelPermissions: root.isEditMode && d.uniquePermissionChannels.length > 0 && channelPermissionsPanel.anyPermissionLost
|
||||||
|
|
||||||
// models
|
// models
|
||||||
|
readonly property var tokenMasterPermissionsModel: SortFilterProxyModel {
|
||||||
|
id: tokenMasterPermissionsModel
|
||||||
|
sourceModel: root.permissionsModel
|
||||||
|
function filterPredicate(modelData) {
|
||||||
|
return (modelData.permissionType === Constants.permissionType.becomeTokenMaster)
|
||||||
|
&& modelData.tokenCriteriaMet
|
||||||
|
}
|
||||||
|
filters: ExpressionFilter {
|
||||||
|
expression: tokenMasterPermissionsModel.filterPredicate(model)
|
||||||
|
}
|
||||||
|
}
|
||||||
readonly property var adminPermissionsModel: SortFilterProxyModel {
|
readonly property var adminPermissionsModel: SortFilterProxyModel {
|
||||||
id: adminPermissionsModel
|
id: adminPermissionsModel
|
||||||
sourceModel: root.permissionsModel
|
sourceModel: root.permissionsModel
|
||||||
function filterPredicate(modelData) {
|
function filterPredicate(modelData) {
|
||||||
return (modelData.permissionType === Constants.permissionType.admin) &&
|
return (modelData.permissionType === Constants.permissionType.admin) &&
|
||||||
(modelData.tokenCriteriaMet && !modelData.isPrivate) // admin privs are hidden if criteria not met
|
(!modelData.isPrivate || (modelData.tokenCriteriaMet && modelData.isPrivate)) // visible or (hidden & met)
|
||||||
}
|
}
|
||||||
filters: ExpressionFilter {
|
filters: ExpressionFilter {
|
||||||
expression: adminPermissionsModel.filterPredicate(model)
|
expression: adminPermissionsModel.filterPredicate(model)
|
||||||
@ -78,12 +93,25 @@ Rectangle {
|
|||||||
sourceModel: root.permissionsModel
|
sourceModel: root.permissionsModel
|
||||||
function filterPredicate(modelData) {
|
function filterPredicate(modelData) {
|
||||||
return (modelData.permissionType === Constants.permissionType.member) &&
|
return (modelData.permissionType === Constants.permissionType.member) &&
|
||||||
(modelData.tokenCriteriaMet || !modelData.isPrivate)
|
(!modelData.isPrivate || (modelData.tokenCriteriaMet && modelData.isPrivate)) // visible or (hidden & met)
|
||||||
}
|
}
|
||||||
filters: ExpressionFilter {
|
filters: ExpressionFilter {
|
||||||
expression: joinPermissionsModel.filterPredicate(model)
|
expression: joinPermissionsModel.filterPredicate(model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used to check if there are any visible channel permissions
|
||||||
|
readonly property var channelsPermissionsModel: SortFilterProxyModel {
|
||||||
|
id: channelsPermissionsModel
|
||||||
|
sourceModel: root.permissionsModel
|
||||||
|
function filterPredicate(modelData) {
|
||||||
|
return (modelData.permissionType === Constants.permissionType.read || modelData.permissionType === Constants.permissionType.viewAndPost) &&
|
||||||
|
(!modelData.isPrivate || (modelData.tokenCriteriaMet && modelData.isPrivate)) // visible or (hidden & met)
|
||||||
|
}
|
||||||
|
filters: ExpressionFilter {
|
||||||
|
expression: channelsPermissionsModel.filterPredicate(model)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
@ -118,6 +146,11 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// permission types
|
// permission types
|
||||||
|
PermissionPanel {
|
||||||
|
id: tokenMasterPermissionPanel
|
||||||
|
permissionType: PermissionTypes.Type.TokenMaster
|
||||||
|
permissionsModel: d.tokenMasterPermissionsModel
|
||||||
|
}
|
||||||
PermissionPanel {
|
PermissionPanel {
|
||||||
id: joinPermissionPanel
|
id: joinPermissionPanel
|
||||||
permissionType: PermissionTypes.Type.Member
|
permissionType: PermissionTypes.Type.Member
|
||||||
@ -178,6 +211,8 @@ Rectangle {
|
|||||||
return qsTr("Become an admin")
|
return qsTr("Become an admin")
|
||||||
case PermissionTypes.Type.Member:
|
case PermissionTypes.Type.Member:
|
||||||
return qsTr("Join %1").arg(root.communityName)
|
return qsTr("Join %1").arg(root.communityName)
|
||||||
|
case PermissionTypes.Type.TokenMaster:
|
||||||
|
return qsTr("Become a TokenMaster")
|
||||||
default:
|
default:
|
||||||
return d.uniquePermissionChannels[index][1]
|
return d.uniquePermissionChannels[index][1]
|
||||||
}
|
}
|
||||||
@ -326,6 +361,8 @@ Rectangle {
|
|||||||
return qsTr("View only")
|
return qsTr("View only")
|
||||||
case PermissionTypes.Type.ViewAndPost:
|
case PermissionTypes.Type.ViewAndPost:
|
||||||
return qsTr("View & post")
|
return qsTr("View & post")
|
||||||
|
case PermissionTypes.Type.TokenMaster:
|
||||||
|
return qsTr("TokenMaster")
|
||||||
default:
|
default:
|
||||||
return "???"
|
return "???"
|
||||||
}
|
}
|
||||||
@ -354,6 +391,15 @@ Rectangle {
|
|||||||
padding: d.absLeftMargin
|
padding: d.absLeftMargin
|
||||||
background: PanelBg {}
|
background: PanelBg {}
|
||||||
|
|
||||||
|
visible: {
|
||||||
|
for (var i = 0; i < channelPermsRepeater.count; i++) {
|
||||||
|
var chanPermissionItem = channelPermsRepeater.itemAt(i);
|
||||||
|
if (chanPermissionItem.channelPermissionsModel.count > 0)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
readonly property string channelKey: modelData[0]
|
readonly property string channelKey: modelData[0]
|
||||||
readonly property bool readPermissionMet: channelPermsRepeater.count > 0 ? channelPermsRepeater.itemAt(0).tokenCriteriaMet : false
|
readonly property bool readPermissionMet: channelPermsRepeater.count > 0 ? channelPermsRepeater.itemAt(0).tokenCriteriaMet : false
|
||||||
readonly property bool viewAndPostPermissionMet: channelPermsRepeater.count > 1 ? channelPermsRepeater.itemAt(1).tokenCriteriaMet : false
|
readonly property bool viewAndPostPermissionMet: channelPermsRepeater.count > 1 ? channelPermsRepeater.itemAt(1).tokenCriteriaMet : false
|
||||||
@ -377,6 +423,7 @@ Rectangle {
|
|||||||
readonly property int permissionType: modelData
|
readonly property int permissionType: modelData
|
||||||
readonly property alias tokenCriteriaMet: overallPermissionRow2.tokenCriteriaMet
|
readonly property alias tokenCriteriaMet: overallPermissionRow2.tokenCriteriaMet
|
||||||
readonly property bool permissionLost: d.initialChannelPermissions[channelPermsPanel.channelKey][index] && !tokenCriteriaMet
|
readonly property bool permissionLost: d.initialChannelPermissions[channelPermsPanel.channelKey][index] && !tokenCriteriaMet
|
||||||
|
readonly property alias channelPermissionsModel: permissionsRepeater2.model
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: grid2.implicitHeight + grid2.anchors.margins*2
|
Layout.preferredHeight: grid2.implicitHeight + grid2.anchors.margins*2
|
||||||
@ -384,6 +431,7 @@ Rectangle {
|
|||||||
border.color: d.tableBorderColor
|
border.color: d.tableBorderColor
|
||||||
radius: Style.current.radius
|
radius: Style.current.radius
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
|
visible: permissionsRepeater2.model.count > 0
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: grid2
|
id: grid2
|
||||||
@ -405,7 +453,7 @@ Rectangle {
|
|||||||
sourceModel: root.permissionsModel
|
sourceModel: root.permissionsModel
|
||||||
function filterPredicate(modelData) {
|
function filterPredicate(modelData) {
|
||||||
return modelData.permissionType === channelPermsSubPanel.permissionType &&
|
return modelData.permissionType === channelPermsSubPanel.permissionType &&
|
||||||
!modelData.isPrivate &&
|
(!modelData.isPrivate || (modelData.tokenCriteriaMet && modelData.isPrivate)) &&
|
||||||
ModelUtils.contains(modelData.channelsListModel, "key", channelPermsPanel.channelKey) // filter and group by channel "key"
|
ModelUtils.contains(modelData.channelsListModel, "key", channelPermsPanel.channelKey) // filter and group by channel "key"
|
||||||
}
|
}
|
||||||
filters: ExpressionFilter {
|
filters: ExpressionFilter {
|
||||||
|
@ -436,6 +436,8 @@ QtObject {
|
|||||||
readonly property int member: 2
|
readonly property int member: 2
|
||||||
readonly property int read: 3
|
readonly property int read: 3
|
||||||
readonly property int viewAndPost: 4
|
readonly property int viewAndPost: 4
|
||||||
|
readonly property int becomeTokenMaster: 5
|
||||||
|
readonly property int becomeTokenOwner: 6
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly property QtObject messageContentType: QtObject {
|
readonly property QtObject messageContentType: QtObject {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user