Browse Source

Fix authoriy inherit issue (#3679)

kennylbj 6 years atrás
parent
commit
a9efb31bc9
1 changed files with 12 additions and 20 deletions
  1. 12 20
      src/pages/Authorized.js

+ 12 - 20
src/pages/Authorized.js

@@ -6,28 +6,20 @@ import Authorized from '@/utils/Authorized';
 
 
 function AuthComponent({ children, location, routerData, status }) {
 function AuthComponent({ children, location, routerData, status }) {
   const isLogin = status === 'ok';
   const isLogin = status === 'ok';
+  const getRouteAuthority = (path, routeData) => {
+    let authorities;
+    routeData.forEach(route => {
+      // match prefix
+      if (pathToRegexp(`${route.path}(.*)`).test(path)) {
+        authorities = route.authority || authorities;
 
 
-  const getRouteAuthority = (pathname, routeData) => {
-    const routes = routeData.slice(); // clone
-
-    const getAuthority = (routeDatas, path) => {
-      let authorities;
-      routeDatas.forEach(route => {
-        // check partial route
-        if (pathToRegexp(`${route.path}(.*)`).test(path)) {
-          if (route.authority) {
-            authorities = route.authority;
-          }
-          // is exact route?
-          if (!pathToRegexp(route.path).test(path) && route.routes) {
-            authorities = getAuthority(route.routes, path);
-          }
+        // get children authority recursively
+        if (route.routes) {
+          authorities = getRouteAuthority(path, route.routes) || authorities;
         }
         }
-      });
-      return authorities;
-    };
-
-    return getAuthority(routes, pathname);
+      }
+    });
+    return authorities;
   };
   };
   return (
   return (
     <Authorized
     <Authorized