From 11ec7ce32380a3a3194e84d77c6b6e5538dae2cf Mon Sep 17 00:00:00 2001 From: DavidQuartz Date: Thu, 16 Jun 2022 17:20:42 +0000 Subject: [PATCH] fixed perms for users in groups with manage perms --- .../js/selectors/__tests__/resource-test.js | 17 ++++++++++++++++- .../client/js/selectors/resource.js | 6 +++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/geonode_mapstore_client/client/js/selectors/__tests__/resource-test.js b/geonode_mapstore_client/client/js/selectors/__tests__/resource-test.js index 596df34d1a..43675ec92b 100644 --- a/geonode_mapstore_client/client/js/selectors/__tests__/resource-test.js +++ b/geonode_mapstore_client/client/js/selectors/__tests__/resource-test.js @@ -14,7 +14,8 @@ import { getGeonodeResourceFromDashboard, getResourceThumbnail, updatingThumbnailResource, - isThumbnailChanged + isThumbnailChanged, + canEditPermissions } from '../resource'; const testState = { @@ -25,6 +26,9 @@ const testState = { thumbnailChanged: true, thumbnail_url: 'thumbnail.jpeg', updatingThumbnail: true + }, + compactPermissions: { + groups: [{name: 'test-group', permissions: 'manage'}] } }, geostory: { @@ -36,6 +40,13 @@ const testState = { originalData: { widgets: [{widgetType: 'map', name: 'test widget', map: {extraParams: {pk: 1}}}, {widgetType: 'map', name: 'test widget 2', map: {pk: 1}}] } + }, + security: { + user: { + info: { + groups: ['test-group'] + } + } } }; @@ -65,4 +76,8 @@ describe('resource selector', () => { it('should get resource thumbnail updating status', () => { expect(updatingThumbnailResource(testState)).toBeTruthy(); }); + + it('should get permissions from users in groups with manage rights', () => { + expect(canEditPermissions(testState)).toBeTruthy(); + }); }); diff --git a/geonode_mapstore_client/client/js/selectors/resource.js b/geonode_mapstore_client/client/js/selectors/resource.js index 3c76ef526f..42f0138264 100644 --- a/geonode_mapstore_client/client/js/selectors/resource.js +++ b/geonode_mapstore_client/client/js/selectors/resource.js @@ -102,9 +102,13 @@ export const getPermissionsPayload = (state) => { export const canEditPermissions = (state) => { const compactPermissions = getCompactPermissions(state); const users = compactPermissions.users || []; + const groups = compactPermissions.groups || []; + const organizations = compactPermissions.organizations || []; const user = state?.security?.user; const { permissions } = user && users.find(({ id }) => id === user.pk) || {}; - return ['owner', 'manage'].includes(permissions); + const { permissions: allowedGroups } = user && groups.find((group) => user.info.groups.includes(group.name)) || {}; + const { permissions: allowedOrganizations } = user && organizations.find((organization) => user.info.groups.includes(organization.name)) || {}; + return ['owner', 'manage'].includes(permissions) || ['manage'].includes(allowedGroups) || ['manage'].includes(allowedOrganizations); }; export const getSelectedLayerPermissions = (state) => {