Skip to content

Commit

Permalink
Replace role parsing with user context
Browse files Browse the repository at this point in the history
  • Loading branch information
testower committed Aug 2, 2024
1 parent 2e22eb1 commit b8e3b6f
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 46 deletions.
27 changes: 27 additions & 0 deletions src/actions/UserContextActions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import axios from 'axios';
import getApiConfig from './getApiConfig';
import * as types from './actionTypes';
import SuppliersActions from './SuppliersActions';

var UserContextActions = {};

UserContextActions.fetchUserContext = () => async (dispatch, getState) => {
const url = window.config.providersBaseUrl + 'usercontext';
return axios
.get(url, await getApiConfig(getState().UserReducer.auth))
.then(response => {
dispatch(SuppliersActions.receiveUserContext(response.data));
})
.catch(err => {
SuppliersActions.addNotification('Failed to fetch user context', 'error');
});
};

SuppliersActions.receiveUserContext = data => {
return {
type: types.RECEIVED_USER_CONTEXT,
payLoad: data
};
};

export default UserContextActions;
2 changes: 2 additions & 0 deletions src/actions/actionTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,3 +233,5 @@ export const RECEIVED_EXPORTED_FILES = 'RECEIVED_EXPORTED_FILES';
export const CONFIG_LOADED = 'CONFIG_LOADED';

export const TOGGLE_MENU = 'TOGGLE_MENU';

export const RECEIVED_USER_CONTEXT = 'RECEIVED_USER_CONTEXT';
10 changes: 6 additions & 4 deletions src/app/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,22 @@ import { MuiThemeProvider as V0MuiThemeProvider } from 'material-ui';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import { connect } from 'react-redux';
import UtilsActions from 'actions/UtilsActions';
import roleParser from 'roles/rolesParser';
import NoAccess from './components/NoAccess';
import Router from './Router';
import Menu from './components/Menu';
import NotificationContainer from './components/NotificationContainer';
import UserContextActions from '../actions/UserContextActions';

const themeV0 = getMuiTheme({
/* theme for v0.x */
});

const MainPage = ({ dispatch, isConfigLoaded, isMenuOpen, auth }) => {
const MainPage = ({ dispatch, isConfigLoaded, isMenuOpen, auth, isAdmin }) => {
useEffect(() => {
cfgreader.readConfig(config => {
window.config = config;
dispatch(UtilsActions.notifyConfigIsLoaded());
dispatch(UserContextActions.fetchUserContext());
});
}, [dispatch]);

Expand All @@ -59,7 +60,7 @@ const MainPage = ({ dispatch, isConfigLoaded, isMenuOpen, auth }) => {
<Menu open={isMenuOpen} />
<div className="app">
<Header />
{roleParser.isAdmin(auth.roleAssignments) ? (
{isAdmin ? (
<Router />
) : (
<NoAccess
Expand All @@ -82,7 +83,8 @@ const MainPage = ({ dispatch, isConfigLoaded, isMenuOpen, auth }) => {
const mapStateToProps = state => ({
auth: state.UserReducer.auth,
isConfigLoaded: state.UtilsReducer.isConfigLoaded,
isMenuOpen: state.app.isMenuOpen
isMenuOpen: state.app.isMenuOpen,
isAdmin: state.UserContextReducer.isRouteDataAdmin
});

export default connect(mapStateToProps)(MainPage);
35 changes: 14 additions & 21 deletions src/roles/rolesParser.js → src/reducers/UserContextReducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,31 +14,24 @@
*
*/

const rolesParser = {};
import * as types from 'actions/actionTypes';

rolesParser.canEditOrganisation = roleAssignments => {
if (!roleAssignments) return false;

let canEditOrganisation = false;

roleAssignments.forEach(roleString => {
let roleJSON = JSON.parse(roleString);
if (roleJSON.r === 'editOrganisation') {
canEditOrganisation = true;
}
});
return canEditOrganisation;
const initialState = {
preferredName: '',
isRouteDataAdmin: false,
isOrganisationAdmin: false
};

rolesParser.isAdmin = roleAssignments => {
if (!roleAssignments) return false;
const UserContextReducer = (state = initialState, action) => {
switch (action.type) {
case types.RECEIVED_USER_CONTEXT:
return Object.assign({}, state, {
...action.payLoad
});

for (let i = 0; i < roleAssignments.length; i++) {
let role = JSON.parse(roleAssignments[i]);
if (role.r === 'adminEditRouteData') return true;
default:
return state;
}

return false;
};

export default rolesParser;
export default UserContextReducer;
4 changes: 3 additions & 1 deletion src/reducers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import MardukReducer from './MardukReducer';
import UtilsReducer from './UtilsReducer';
import OrganizationReducer from './OrganizationReducer';
import UserReducer from './UserReducer';
import UserContextReducer from './UserContextReducer';

const createRootReducer = history =>
combineReducers({
Expand All @@ -32,7 +33,8 @@ const createRootReducer = history =>
MardukReducer,
UtilsReducer,
OrganizationReducer,
UserReducer
UserReducer,
UserContextReducer
});

export default createRootReducer;
12 changes: 4 additions & 8 deletions src/screens/providers/components/SupplierTabWrapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@ import { PulseLoader as Loader } from 'halogenium';
import Tabs from 'muicss/lib/react/tabs';
import Tab from 'muicss/lib/react/tab';
import { getQueryVariable } from 'utils';
import { FileUpload } from '../../common/components/FileUpload';
import OrganizationRegister from './OrganizationRegister';
import rolesParser from 'roles/rolesParser';
import ExportedFilesView from './ExportedFilesView';
import { MicroFrontend } from '@entur/micro-frontend';
import { MicroFrontendFetchStatus } from '../../../app/components/MicroFrontendFetchStatus';
Expand Down Expand Up @@ -215,13 +213,10 @@ class SupplierTabWrapper extends React.Component {
activeId,
suppliers,
fileListIsLoading,
auth
auth,
canEditOrganisation
} = this.props;

const canEditOrganisation = rolesParser.canEditOrganisation(
auth.roleAssignments
);

if (fileListIsLoading) {
return (
<div className="supplier-details disabled">
Expand Down Expand Up @@ -401,7 +396,8 @@ const mapStateToProps = state => ({
displayAllSuppliers: state.SuppliersReducer.all_suppliers_selected,
providerEvents: state.SuppliersReducer.statusList,
allProvidersEvents: state.SuppliersReducer.statusListAllProviders,
auth: state.UserReducer.auth
auth: state.UserReducer.auth,
canEditOrganisation: state.UserContextReducer.isOrganisationAdmin
});

export default connect(mapStateToProps)(SupplierTabWrapper);
10 changes: 3 additions & 7 deletions src/screens/providers/components/SuppliersContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import SuppliersActions from 'actions/SuppliersActions';
import cfgreader from 'config/readConfig';
import MdNew from 'material-ui/svg-icons/content/add';
import { getQueryVariable } from 'utils';
import rolesParser from 'roles/rolesParser';
import MdEdit from 'material-ui/svg-icons/image/edit';
import MdDelete from 'material-ui/svg-icons/action/delete-forever';
import ConfirmDialog from 'modals/ConfirmDialog';
Expand Down Expand Up @@ -91,10 +90,7 @@ class SuppliersContainer extends React.Component {
}

render() {
const { suppliers, activeProviderId, auth } = this.props;
const canEditOrganisation = rolesParser.canEditOrganisation(
auth.roleAssignments
);
const { suppliers, activeProviderId, canEditOrganisation } = this.props;

const supplierItems = [
{
Expand Down Expand Up @@ -198,8 +194,8 @@ class SuppliersContainer extends React.Component {
const mapStateToProps = state => ({
suppliers: state.SuppliersReducer.data,
activeProviderId: state.SuppliersReducer.activeId,
auth: state.UserReducer.auth,
displayAllSuppliers: state.SuppliersReducer.all_suppliers_selected
displayAllSuppliers: state.SuppliersReducer.all_suppliers_selected,
canEditOrganisation: state.UserContextReducer.isOrganisationAdmin
});

export default connect(mapStateToProps)(SuppliersContainer);
8 changes: 3 additions & 5 deletions src/screens/providers/providers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@ import SuppliersContainer from './components/SuppliersContainer';
import SupplierTabWrapper from './components/SupplierTabWrapper';
import SupplierPage from './components/SupplierPage';
import ModalViewContainer from 'modals/ModalActionContainer';
import rolesParser from 'roles/rolesParser';
import AdministrativeActions from './components/AdministrativeActions';
import { connect } from 'react-redux';
import { ShowOTPGraphStatus } from './components/ShowOTPGraphStatus';

const Providers = ({ auth }) => {
const isAdmin = rolesParser.isAdmin(auth.roleAssignments);

const Providers = ({ auth, isAdmin }) => {
return (
<div style={{ display: 'flex' }}>
<div style={{ display: 'flex', flexDirection: 'column', flexGrow: 1 }}>
Expand All @@ -34,7 +31,8 @@ const Providers = ({ auth }) => {
};

const mapStateToProps = state => ({
auth: state.UserReducer.auth
auth: state.UserReducer.auth,
isAdmin: state.UserContextReducer.isRouteDataAdmin
});

export default connect(mapStateToProps)(Providers);

0 comments on commit b8e3b6f

Please sign in to comment.