diff --git a/config/router.config.js b/config/router.config.js index 15630ca587c213a509a2c1b3792557c2aced4a57..e954ced977efea00da8597f484376e345b32caf9 100644 --- a/config/router.config.js +++ b/config/router.config.js @@ -21,9 +21,10 @@ export default [ { path: '/', component: '../layouts/BasicLayout', + Routes: ['src/pages/Authorized'], routes: [ // dashboard - { path: '/', redirect: '/dashboard/analysis' }, + { path: '/', redirect: '/dashboard/analysis', authority: ['admin', 'user'] }, { path: '/dashboard', name: 'dashboard', @@ -87,6 +88,7 @@ export default [ { path: '/form/advanced-form', name: 'advancedform', + authority: ['admin'], component: './Forms/AdvancedForm', }, ], @@ -160,6 +162,7 @@ export default [ { path: '/profile/advanced', name: 'advanced', + authority: ['admin'], component: './Profile/AdvancedProfile', }, ], diff --git a/src/app.js b/src/app.js index 2e98b22be05fbbad59680c49876d3a67a246ecef..0f35ff9af6376bcc3c3606f219ae6bcd1af6b769 100644 --- a/src/app.js +++ b/src/app.js @@ -1,3 +1,5 @@ +import fetch from 'dva/fetch'; + export const dva = { config: { onError(err) { @@ -6,6 +8,37 @@ export const dva = { }, }; +let authRoutes = {}; + +function ergodicRoutes(routes, authKey, authority) { + routes.forEach(element => { + if (element.path === authKey) { + if (!element.authority) element.authority = []; // eslint-disable-line + Object.assign(element.authority, authority || []); + } else if (element.routes) { + ergodicRoutes(element.routes, authKey, authority); + } + return element; + }); +} + +export function patchRoutes(routes) { + Object.keys(authRoutes).map(authKey => + ergodicRoutes(routes, authKey, authRoutes[authKey].authority) + ); + window.g_routes = routes; +} + export function render(oldRender) { - oldRender(); + fetch('/api/auth_routes') + .then(res => res.json()) + .then( + ret => { + authRoutes = ret; + oldRender(); + }, + () => { + oldRender(); + } + ); }