index.js 671 B

123456789101112131415
  1. import { Navigate, Route } from 'react-router-dom';
  2. import { connect } from 'react-redux';
  3. export const ProtectedRoute = ({ roles = [], fallback = '/', component, auth, ...routeProps }) => {
  4. const WrapperComponent = (renderProps) => {
  5. const C = component;
  6. !!auth.length || (auth = ['anon']);
  7. if (!auth.filter((role) => roles.includes(role)).length) {
  8. return <Navigate to={fallback} />;
  9. }
  10. return <C {...renderProps} />;
  11. };
  12. return <Route {...routeProps} element={<WrapperComponent />} />;
  13. };
  14. export const CProtectedRoute = connect((state) => ({ auth: state.auth?.payload?.sub?.acl || [] }))(ProtectedRoute);