auth.jsx 869 Bytes
Newer Older
wuhao's avatar
wuhao committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import { Navigate, Outlet, useModel, useLocation } from '@umijs/max';
import { useEffect, useMemo } from 'react';

function treeToArr(data) {
  const result = [];
  data?.forEach((item) => {
    const loop = (data) => {
      result.push(data?.path);
      let child = data.routes;
      if (child) {
        for (let i = 0; i < child.length; i++) {
          loop(child[i]);
        }
      }
    };
    loop(item);
  });
  return result;
}

export default (props) => {
  const { initialState } = useModel('@@initialState');
  const { pathname } = useLocation();

  const autharr = useMemo(() => {
    return treeToArr(initialState?.newMenu?.userHavePermList);
  }, [initialState?.newMenu?.userHavePermList]);

  if (autharr.includes(pathname) || pathname == '/' || pathname == '/welcome') {
    return <Outlet />;
  } else {
    return <Navigate to="/403" />;
  }
};