Skip to content

Commit

Permalink
feat: [PROD-12930] add current user permissions in organization secur…
Browse files Browse the repository at this point in the history
…ity in redux
  • Loading branch information
csm-thu committed Feb 7, 2024
1 parent 2a4d314 commit 7251bf5
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 1 deletion.
15 changes: 15 additions & 0 deletions src/services/config/accessControl/Permissions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@
// Licensed under the MIT license.

export const ACL_PERMISSIONS = {
DATASET: {
READ: 'read',
READ_SECURITY: 'read_security',
WRITE: 'write',
DELETE: 'delete',
WRITE_SECURITY: 'write_security',
},
ORGANIZATION: {
READ: 'read',
READ_SECURITY: 'read_security',
CREATE_CHILDREN: 'create_children',
WRITE: 'write',
DELETE: 'delete',
WRITE_SECURITY: 'write_security',
},
SCENARIO: {
READ: 'read',
READ_SECURITY: 'read_security',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
// Copyright (c) Cosmo Tech.
// Licensed under the MIT license.

import { call, takeEvery, put } from 'redux-saga/effects';
import { call, takeEvery, put, select } from 'redux-saga/effects';
import { STATUSES } from '../../../commons/Constants';
import { ORGANIZATION_ACTIONS_KEY } from '../../../commons/OrganizationConstants';
import { Api } from '../../../../services/config/Api';
import { OrganizationsUtils } from '../../../../utils';

const getUserEmail = (state) => state.auth.userEmail;
const getOrganizationPermissionsMapping = (state) => state.application.permissionsMapping.organization;

export function* fetchOrganizationById(organizationId) {
const userEmail = yield select(getUserEmail);
const permissionsMapping = yield select(getOrganizationPermissionsMapping);

const { data } = yield call(Api.Organizations.findOrganizationById, organizationId);
OrganizationsUtils.patchOrganizationWithCurrentUserPermissions(data, userEmail, permissionsMapping);

yield put({
type: ORGANIZATION_ACTIONS_KEY.SET_CURRENT_ORGANIZATION,
status: STATUSES.SUCCESS,
Expand Down
23 changes: 23 additions & 0 deletions src/utils/OrganizationsUtils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) Cosmo Tech.
// Licensed under the MIT license.

import { SecurityUtils } from './SecurityUtils';

const _getUserPermissionsForOrganization = (organization, userEmail, permissionsMapping) => {
if (organization?.security == null || Object.keys(organization?.security).length === 0) {
console.warn(`No security data for organization ${organization?.id}, restricting access to its content`);
return [];
}
return SecurityUtils.getUserPermissionsForResource(organization.security, userEmail, permissionsMapping);
};

const patchOrganizationWithCurrentUserPermissions = (organization, userEmail, permissionsMapping) => {
organization.security = {
...organization.security,
currentUserPermissions: _getUserPermissionsForOrganization(organization, userEmail, permissionsMapping),
};
};

export const OrganizationsUtils = {
patchOrganizationWithCurrentUserPermissions,
};
1 change: 1 addition & 0 deletions src/utils/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export { ApiUtils } from './ApiUtils';
export { ArrayDictUtils } from './ArrayDictUtils';
export { ConfigUtils } from './ConfigUtils';
export { DatasetsUtils } from './DatasetsUtils';
export { OrganizationsUtils } from './OrganizationsUtils';
export { PowerBIUtils } from './PowerBIUtils';
export { TranslationUtils } from './TranslationUtils';
export { SolutionsUtils } from './SolutionsUtils';
Expand Down

0 comments on commit 7251bf5

Please sign in to comment.