Commit ff08655f authored by afc163's avatar afc163 Committed by 偏右

check every matched route for authority

parent 621299e7
......@@ -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',
......
......@@ -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>
);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment