diff --git a/mock/route.js b/mock/route.js new file mode 100644 index 0000000000000000000000000000000000000000..418d10f1ab333d66dfed05220d8da9a11110a9e8 --- /dev/null +++ b/mock/route.js @@ -0,0 +1,5 @@ +export default { + '/api/auth_routes': { + '/form/advanced-form': { authority: ['admin', 'user'] }, + }, +}; diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000000000000000000000000000000000000..7de5a69e1330e9ff0738ddd1ce378cc661e04619 --- /dev/null +++ b/src/app.js @@ -0,0 +1,38 @@ +import fetch from 'dva/fetch'; + +export const dva = { + config: { + onError(err) { + err.preventDefault(); + }, + }, +}; + +let authRoutes = null; + +function ergodicRoutes(routes, authKey, authority) { + routes.forEach(element => { + if (element.path === authKey) { + 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) { + fetch('/api/auth_routes') + .then(res => res.json()) + .then(ret => { + authRoutes = ret; + oldRender(); + }); +}