Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat(rbac frontend) Protected routes and menu #82

Merged
merged 15 commits into from
Jan 28, 2025
Next Next commit
minor: renamed authentication folder and deleted unused signout button
GailMelanie committed Jan 23, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 66d27c8a2bcc74f85492adffd05952cb6a8c8198
2 changes: 1 addition & 1 deletion src/app/[locale]/list/_components/AasListDataWrapper.tsx
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
import { SelectRepository } from './filter/SelectRepository';
import { useTranslations } from 'next-intl';
import { ApiResponseWrapperError, ApiResultStatus } from 'lib/util/apiResponseWrapper/apiResponseWrapper';
import { AuthenticationPrompt } from 'components/azureAuthentication/AuthenticationPrompt';
import { AuthenticationPrompt } from 'components/authentication/AuthenticationPrompt';

export default function AasListDataWrapper() {
const [isLoadingList, setIsLoadingList] = useState(false);
32 changes: 18 additions & 14 deletions src/app/[locale]/settings/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';

import { PrivateRoute } from 'components/azureAuthentication/PrivateRoute';
import { PrivateRoute } from 'components/authentication/PrivateRoute';
import { Box, Card } from '@mui/material';
import { FormattedMessage, useIntl } from 'react-intl';
import { ViewHeading } from 'components/basics/ViewHeading';
@@ -14,7 +14,7 @@ import { useEnv } from 'app/env/provider';

enum settingsPageTypes {
ID_STRUCTURE,
MNESTIX_CONNECTIONS
MNESTIX_CONNECTIONS,
}

export default function Page() {
@@ -25,13 +25,14 @@ export default function Page() {
const settingsTabItems: TabSelectorItem[] = [
{
id: settingsPageTypes[settingsPageTypes.MNESTIX_CONNECTIONS],
label: intl.formatMessage(messages.mnestix.connections.title)
}]
label: intl.formatMessage(messages.mnestix.connections.title),
},
];

if(env.MNESTIX_BACKEND_API_URL){
if (env.MNESTIX_BACKEND_API_URL) {
const settingsTabToAdd = {
id: settingsPageTypes[settingsPageTypes.ID_STRUCTURE],
label: intl.formatMessage(messages.mnestix.idStructure)
label: intl.formatMessage(messages.mnestix.idStructure),
};
settingsTabItems.splice(0, 0, settingsTabToAdd);
}
@@ -41,24 +42,27 @@ export default function Page() {
const renderActiveSettingsTab = () => {
switch (selectedTab.id) {
case settingsPageTypes[settingsPageTypes.ID_STRUCTURE]:
return <IdSettingsCard/>
return <IdSettingsCard />;
case settingsPageTypes[settingsPageTypes.MNESTIX_CONNECTIONS]:
return <MnestixConnectionsCard/>
return <MnestixConnectionsCard />;
default:
return <></>
return <></>;
}
}
};

return (
<PrivateRoute>
<Box sx={{ p:4, width: '100%', margin: '0 auto' }}>
<Box sx={{ p: 4, width: '100%', margin: '0 auto' }}>
<Box sx={{ mb: 3 }}>
<ViewHeading title={<FormattedMessage {...messages.mnestix.settings} />}/>
<ViewHeading title={<FormattedMessage {...messages.mnestix.settings} />} />
</Box>
<Card sx={{ p: 2 }}>
<Box display="grid" gridTemplateColumns={isMobile ? '1fr' : '1fr 3fr'}>
<VerticalTabSelector items={settingsTabItems} selected={selectedTab}
setSelected={setSelectedTab}/>
<VerticalTabSelector
items={settingsTabItems}
selected={selectedTab}
setSelected={setSelectedTab}
/>
{renderActiveSettingsTab()}
</Box>
</Card>
17 changes: 12 additions & 5 deletions src/app/[locale]/templates/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';

import { PrivateRoute } from 'components/azureAuthentication/PrivateRoute';
import { PrivateRoute } from 'components/authentication/PrivateRoute';
import { CheckCircle, CloudUploadOutlined, Delete, MoreVert, Restore } from '@mui/icons-material';
import {
Box,
@@ -25,7 +25,8 @@ import {
updateNodeIds,
getParentOfElement,
splitIdIntoArray,
rewriteNodeIds, generateSubmodelViewObjectFromSubmodelElement,
rewriteNodeIds,
generateSubmodelViewObjectFromSubmodelElement,
} from 'lib/util/SubmodelViewObjectUtil';
import { TemplateEditFields, TemplateEditFieldsProps } from '../_components/template-edit/TemplateEditFields';
import { useAuth } from 'lib/hooks/UseAuth';
@@ -74,11 +75,18 @@ export default function Page() {
function generateSubmodelViewObject(sm: Submodel): SubmodelViewObject {
const localSm = cloneDeep(sm);
// Ids are unique for the tree, start with 0, children have 0-0, 0-1, and so on
const frontend: SubmodelViewObject = { id: '0', name: localSm.idShort!, children: [], isAboutToBeDeleted: false };
const frontend: SubmodelViewObject = {
id: '0',
name: localSm.idShort!,
children: [],
isAboutToBeDeleted: false,
};

if (localSm.submodelElements) {
const arr = localSm.submodelElements;
arr.forEach((el, i) => frontend.children?.push(generateSubmodelViewObjectFromSubmodelElement(el, '0-' + i)));
arr.forEach((el, i) =>
frontend.children?.push(generateSubmodelViewObjectFromSubmodelElement(el, '0-' + i)),
);
localSm.submodelElements = [];
}
frontend.data = localSm;
@@ -257,7 +265,6 @@ export default function Page() {
return undefined;
}


function deleteItem(elementToDeleteId: string, submodel: SubmodelViewObject): SubmodelViewObject {
const idArray = splitIdIntoArray(elementToDeleteId);
const parentElement = getParentOfElement(elementToDeleteId, submodel);
2 changes: 1 addition & 1 deletion src/app/[locale]/templates/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';

import { PrivateRoute } from 'components/azureAuthentication/PrivateRoute';
import { PrivateRoute } from 'components/authentication/PrivateRoute';
import { Add, FolderOutlined } from '@mui/icons-material';
import { Box, Button, Divider, Paper, Skeleton, Typography } from '@mui/material';
import { TabSelectorItem, VerticalTabSelector } from 'components/basics/VerticalTabSelector';
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Box, Typography } from '@mui/material';
import AuthenticationLock from 'assets/authentication_lock.svg';
import SignInButton from 'components/azureAuthentication/SignInButton';
import SignInButton from 'components/authentication/SignInButton';
import { useTranslations } from 'next-intl';

export function AuthenticationPrompt() {
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import { useAuth } from 'lib/hooks/UseAuth';
import { useEnv } from 'app/env/provider';
import { AuthenticationPrompt } from 'components/azureAuthentication/AuthenticationPrompt';
import { AuthenticationPrompt } from 'components/authentication/AuthenticationPrompt';

export function PrivateRoute({ children }: { children: React.JSX.Element }) {
const auth = useAuth();
19 changes: 0 additions & 19 deletions src/components/azureAuthentication/SignOutButton.tsx

This file was deleted.