CPRoute.jsx 1.2 KB

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