diff --git a/changes/11188-no-access-user b/changes/11188-no-access-user new file mode 100644 index 0000000000..3190443324 --- /dev/null +++ b/changes/11188-no-access-user @@ -0,0 +1 @@ +* Present the 403 error page when a user with no access logs in. diff --git a/frontend/router/components/AuthenticatedRoutes/AuthenticatedRoutes.tsx b/frontend/router/components/AuthenticatedRoutes/AuthenticatedRoutes.tsx index effdd71c84..647e8191be 100644 --- a/frontend/router/components/AuthenticatedRoutes/AuthenticatedRoutes.tsx +++ b/frontend/router/components/AuthenticatedRoutes/AuthenticatedRoutes.tsx @@ -5,7 +5,9 @@ import paths from "router/paths"; import { AppContext } from "context/app"; import { RoutingContext } from "context/routing"; import useDeepEffect from "hooks/useDeepEffect"; -import { authToken } from "utilities/local"; +import local, { authToken } from "utilities/local"; +import { useErrorHandler } from "react-error-boundary"; +import permissions from "utilities/permissions"; interface IAppProps { children: JSX.Element; @@ -24,6 +26,8 @@ export const AuthenticatedRoutes = ({ const { setRedirectLocation } = useContext(RoutingContext); const { currentUser, config, isSandboxMode } = useContext(AppContext); + const handlePageError = useErrorHandler(); + const redirectToLogin = () => { const { LOGIN } = paths; @@ -89,6 +93,11 @@ export const AuthenticatedRoutes = ({ if (currentUser?.api_only) { return redirectToApiUserOnly(); } + + if (currentUser && permissions.isNoAccess(currentUser)) { + local.removeItem("auth_token"); + return handlePageError({ status: 403 }); + } }, [currentUser]); useDeepEffect(() => {