Хороший способ условного рендеринга маршрута - тот, который предоставлен в разделе Auth документации по реагирующему маршрутизатору: https://reacttraining.com/react-router/web/example/auth-workflow
В вашем приложении отличается то, что вы Вы не авторизуетесь, основываясь на аутентификации, но с некоторыми разрешениями пользователя вы можете сделать что-то вроде этого:
function PrivateRoute({ children, ...rest }) {
return (
<Route
{...rest}
render={({ location }) =>
canEdit(currentUser) ? (
children
) : (
<Redirect
to={{
pathname: "/",
}}
/>
)
}
/>
);
}
Оборачивание маршрута в компоненте PrivateRoute, который вернет ваш маршрут, если у пользователя есть разрешение, или что-то еще, если нет (возможно перенаправление).
export default function AuthExample() {
return (
<Router>
<div>
<Switch>
<Route path="/public">
<PublicPage />
</Route>
<Route path="/login">
<LoginPage />
</Route>
<PrivateRoute path="/protected">
<ProtectedPage />
</PrivateRoute>
</Switch>
</div>
</Router>
);
}