Bläddra i källkod

fix #2291 Increase authority judgment

陈帅 7 år sedan
förälder
incheckning
608d599801
1 ändrade filer med 17 tillägg och 9 borttagningar
  1. 17 9
      src/layouts/BasicLayout.js

+ 17 - 9
src/layouts/BasicLayout.js

@@ -16,6 +16,7 @@ import logo from '../assets/logo.svg';
 import Footer from './Footer';
 import Header from './Header';
 import Context from './MenuContext';
+import Exception403 from '../pages/Exception/403';
 
 const { Content } = Layout;
 
@@ -76,6 +77,7 @@ class BasicLayout extends React.PureComponent {
     this.getPageTitle = memoizeOne(this.getPageTitle);
     this.getBreadcrumbNameMap = memoizeOne(this.getBreadcrumbNameMap, isEqual);
     this.breadcrumbNameMap = this.getBreadcrumbNameMap();
+    this.matchParamsPath = memoizeOne(this.matchParamsPath, isEqual);
   }
 
   state = {
@@ -156,14 +158,16 @@ class BasicLayout extends React.PureComponent {
     return routerMap;
   }
 
+  matchParamsPath = pathname => {
+    const pathKey = Object.keys(this.breadcrumbNameMap).find(key =>
+      pathToRegexp(key).test(pathname)
+    );
+    return this.breadcrumbNameMap[pathKey];
+  };
+
   getPageTitle = pathname => {
-    let currRouterData = null;
-    // match params path
-    Object.keys(this.breadcrumbNameMap).forEach(key => {
-      if (pathToRegexp(key).test(pathname)) {
-        currRouterData = this.breadcrumbNameMap[key];
-      }
-    });
+    const currRouterData = this.matchParamsPath(pathname);
+
     if (!currRouterData) {
       return 'Ant Design Pro';
     }
@@ -221,6 +225,7 @@ class BasicLayout extends React.PureComponent {
     const { isMobile } = this.state;
     const isTop = PropsLayout === 'topmenu';
     const menuData = this.getMenuData();
+    const routerConfig = this.matchParamsPath(pathname);
     const layout = (
       <Layout>
         {isTop && !isMobile ? null : (
@@ -247,12 +252,15 @@ class BasicLayout extends React.PureComponent {
             isMobile={isMobile}
             {...this.props}
           />
-          <Content style={this.getContentStyle()}>{children}</Content>
+          <Content style={this.getContentStyle()}>
+            <Authorized authority={routerConfig.authority} noMatch={<Exception403 />}>
+              {children}
+            </Authorized>
+          </Content>
           <Footer />
         </Layout>
       </Layout>
     );
-
     return (
       <React.Fragment>
         <DocumentTitle title={this.getPageTitle(pathname)}>