Browse Source

check every matched route for authority

afc163 7 years ago
parent
commit
ff08655f9a
2 changed files with 76 additions and 18 deletions
  1. 65 14
      config/router.config.js
  2. 11 4
      src/pages/Authorized.js

+ 65 - 14
config/router.config.js

@@ -28,8 +28,16 @@ module.exports = [
             name: 'analysis',
             component: './Dashboard/Analysis',
           },
-          { path: '/dashboard/monitor', name: 'monitor', component: './Dashboard/Monitor' },
-          { path: '/dashboard/workplace', name: 'workplace', component: './Dashboard/Workplace' },
+          {
+            path: '/dashboard/monitor',
+            name: 'monitor',
+            component: './Dashboard/Monitor',
+          },
+          {
+            path: '/dashboard/workplace',
+            name: 'workplace',
+            component: './Dashboard/Workplace',
+          },
         ],
       },
       // forms
@@ -84,16 +92,36 @@ module.exports = [
         icon: 'table',
         name: 'list',
         routes: [
-          { path: '/list/table-list', name: 'searchtable', component: './List/TableList' },
-          { path: '/list/basic-list', name: 'basiclist', component: './List/BasicList' },
-          { path: '/list/card-list', name: 'cardlist', component: './List/CardList' },
+          {
+            path: '/list/table-list',
+            name: 'searchtable',
+            component: './List/TableList',
+          },
+          {
+            path: '/list/basic-list',
+            name: 'basiclist',
+            component: './List/BasicList',
+          },
+          {
+            path: '/list/card-list',
+            name: 'cardlist',
+            component: './List/CardList',
+          },
           {
             path: '/list/search',
             name: 'searchlist',
             component: './List/List',
             routes: [
-              { path: '/list/search/articles', name: 'articles', component: './List/Articles' },
-              { path: '/list/search/projects', name: 'projects', component: './List/Projects' },
+              {
+                path: '/list/search/articles',
+                name: 'articles',
+                component: './List/Articles',
+              },
+              {
+                path: '/list/search/projects',
+                name: 'projects',
+                component: './List/Projects',
+              },
               {
                 path: '/list/search/applications',
                 name: 'applications',
@@ -109,8 +137,16 @@ module.exports = [
         icon: 'profile',
         routes: [
           // profile
-          { path: '/profile/basic', name: 'basic', component: './Profile/BasicProfile' },
-          { path: '/profile/advanced', name: 'advanced', component: './Profile/AdvancedProfile' },
+          {
+            path: '/profile/basic',
+            name: 'basic',
+            component: './Profile/BasicProfile',
+          },
+          {
+            path: '/profile/advanced',
+            name: 'advanced',
+            component: './Profile/AdvancedProfile',
+          },
         ],
       },
       {
@@ -119,7 +155,11 @@ module.exports = [
         path: '/result',
         routes: [
           // result
-          { path: '/result/success', name: 'success', component: './Result/Success' },
+          {
+            path: '/result/success',
+            name: 'success',
+            component: './Result/Success',
+          },
           { path: '/result/fail', name: 'fail', component: './Result/Error' },
         ],
       },
@@ -129,9 +169,21 @@ module.exports = [
         path: '/exception',
         routes: [
           // exception
-          { path: '/exception/403', name: 'not-permission', component: './Exception/403' },
-          { path: '/exception/404', name: 'not-find', component: './Exception/404' },
-          { path: '/exception/500', name: 'server-error', component: './Exception/500' },
+          {
+            path: '/exception/403',
+            name: 'not-permission',
+            component: './Exception/403',
+          },
+          {
+            path: '/exception/404',
+            name: 'not-find',
+            component: './Exception/404',
+          },
+          {
+            path: '/exception/500',
+            name: 'server-error',
+            component: './Exception/500',
+          },
           {
             path: '/exception/trigger',
             name: 'trigger',
@@ -172,7 +224,6 @@ module.exports = [
             path: '/account/settings',
             name: 'settings',
             component: './Account/Settings/Info',
-            // authority: ['admin'],
             routes: [
               {
                 path: '/account/settings',

+ 11 - 4
src/pages/Authorized.js

@@ -2,16 +2,23 @@ import React from 'react';
 import RenderAuthorized from '@/components/Authorized';
 import Exception from '@/components/Exception';
 import { matchRoutes } from 'react-router-config';
+import uniq from 'lodash/uniq';
 
 const Authorized = RenderAuthorized(['admin', 'user']);
 const noMatch = <Exception type="403" style={{ minHeight: 500, height: '80%' }} />;
 
 export default ({ children, route, location }) => {
-  const branch =
-    matchRoutes(route.routes, location.pathname).filter(item => item.match.isExact)[0] || {};
-  const { authority } = branch.route || {};
+  const routes = matchRoutes(route.routes, location.pathname);
+  let authorities = [];
+  routes.forEach(item => {
+    if (Array.isArray(item.authority)) {
+      authorities = authorities.concat(item.authority);
+    } else if (typeof item.authority === 'string') {
+      authorities.push(item.authority);
+    }
+  });
   return (
-    <Authorized authority={authority} noMatch={noMatch}>
+    <Authorized authority={uniq(authorities)} noMatch={noMatch}>
       {children}
     </Authorized>
   );