cRoute.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { useEffect, useState } from "react";
  2. import { useHistory, Route, Redirect} from 'react-router-dom';
  3. import { connect } from "react-redux";
  4. const ProtectedRoute = ({fallback='/',
  5. roles=["admin"],
  6. auth,
  7. ...routeProps}) => {
  8. const [acl, setAcl] = useState([]);
  9. const [access, setAccess] = useState(false);
  10. let history = useHistory();
  11. useEffect(() => {
  12. if (auth && auth.payload && auth.payload.sub.acl.length !== 0) {
  13. setAcl(auth.payload.sub.acl);
  14. } else setAcl('anon');
  15. const newAcl = roles.filter((item) => acl.includes(item));
  16. if (newAcl.length) {
  17. setAccess(true);
  18. }
  19. })
  20. return (
  21. < >
  22. { access? <Route {...routeProps}/> : <Redirect to='/'/>}
  23. </>
  24. )
  25. }
  26. //<CRoute roles={["anon", "user", "admin"]} path="/category/:_id" component={PageCategory} />
  27. //<CRoute roles={["admin"]} path="/good/:_id" component={PageGood} />
  28. const CRoute = connect(state => ({auth: state.auth}))(ProtectedRoute);
  29. export default CRoute;