CPRoute.jsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import {connect} from "react-redux";
  2. import {Redirect} from "react-router-dom";
  3. import Route from "react-router-dom/es/Route";
  4. import {actionMyRoute} from "../reducers/RouteReducer";
  5. const RRoute = ({action, component: Component, ...routeProps}) => {
  6. const WrapperComponent = (componentProps) => {
  7. action(componentProps.match)
  8. return <Component {...componentProps}/>
  9. }
  10. return <Route {...routeProps} component={WrapperComponent}/>
  11. }
  12. export const CRRoute = connect(null,
  13. {action: actionMyRoute})(RRoute)
  14. const ProtectedRoute =({ fallback='/',
  15. roles=['admin'],
  16. auth,
  17. component: Component,
  18. ...routeProps}) => {
  19. const WrapperComponent = (componentProps) => {
  20. const acl = auth?.payload?.sub?.acl || ['anon']
  21. const unity = roles.some(item => acl.includes(item))
  22. return(
  23. unity ?
  24. <Component {...componentProps} />
  25. :
  26. <Redirect to="/my-account" />
  27. )
  28. };
  29. return <CRRoute {...routeProps} component={WrapperComponent} />;
  30. }
  31. export const CPRoute = connect(state => ({auth: state.auth}))(ProtectedRoute)