import { useContext } from 'react'; import { Alert, styled } from '@mui/material'; import { ADMIN } from '@server/types/permissions'; import AccessContext from 'contexts/AccessContext'; const StyledList = styled('ul')(({ theme }) => ({ paddingInlineStart: theme.spacing(2), })); interface IPermissionGuardProps { permissions: string | string[]; project?: string; environment?: string; children: JSX.Element; } export const PermissionGuard = ({ permissions, project, environment, children, }: IPermissionGuardProps) => { const { hasAccess } = useContext(AccessContext); const permissionsArray = Array.isArray(permissions) ? permissions : [permissions]; if (!permissionsArray.includes(ADMIN)) { permissionsArray.push(ADMIN); } if (hasAccess(permissionsArray, project, environment)) { return children; } if (permissionsArray.length === 1) { return ( You need the {permissionsArray[0]} permission to access this section. ); } return ( You need one of the following permissions to access this section: {permissionsArray.sort().map((permission) => (
  • {permission}
  • ))}
    ); };