import React from 'react'; import { Redirect, Route, RouteProps } from 'react-router-dom'; import { getUser } from '../services/auth'; function hasRoles(requiredRoles: string[], userRoles: string[]) { requiredRoles = requiredRoles || []; userRoles = userRoles || []; return requiredRoles.every((role) => userRoles.includes(role)); } interface Props extends RouteProps { component?: React.ComponentType; roles?: string[]; } export default function PrivateRoute({ component, roles, render, children, ...rest }: Props) { return ( { const user = getUser(); if (!user) { return ( ); } if (roles && !hasRoles(roles, user?.roles)) { return (

You do not have permission to access this page.

); } if (component) { return React.createElement(component); } if (render) { return render(props); } if (children) { return children; } }} /> ); }