- 添加菜单权限控制

- url 权限控制
This commit is contained in:
sin
2019-03-01 18:15:12 +08:00
parent 814ca633aa
commit 21bacc19d8
14 changed files with 160 additions and 23 deletions

View File

@@ -3,6 +3,7 @@ import isEqual from 'lodash/isEqual';
import { formatMessage } from 'umi/locale';
import Authorized from '@/utils/Authorized';
import { menu } from '../defaultSettings';
import { getAdminMenus, getAdminUrls } from '../services/admin';
const { check } = Authorized;
@@ -70,6 +71,26 @@ const filterMenuData = menuData => {
.map(item => check(item.authority, getSubMenu(item)))
.filter(item => item);
};
/**
* 递归构建服务端配置的菜单
* @param resultMenuData
*/
const recursionBuildResultMenu = resultMenuData => {
const res = {};
for (let i = 0; i < resultMenuData.length; i += 1) {
const menuItem = resultMenuData[i];
//
res[menuItem.handler] = {
...menuItem,
};
if (menuItem.children) {
res[menuItem.handler].children = recursionBuildResultMenu(menuItem.children);
}
}
return res;
};
/**
* 获取面包屑映射
* @param {Object} menuData 菜单配置
@@ -97,26 +118,59 @@ export default {
state: {
menuData: [],
urlsData: {},
breadcrumbNameMap: {},
},
effects: {
*getMenuData({ payload }, { put }) {
*getMenuData({ payload }, { put, call }) {
const { data } = yield call(getAdminMenus);
const { routes, authority } = payload;
const menuData = filterMenuData(memoizeOneFormatter(routes, authority));
// authority
const antMenuData = filterMenuData(memoizeOneFormatter(routes, authority));
let menuData = antMenuData;
const resultMenuData = data;
if (data !== 'all') {
//
const buildResultMenu = recursionBuildResultMenu(resultMenuData);
//
menuData = antMenuData.filter(item => {
if (buildResultMenu[item.path]) {
return item;
}
return false;
});
}
// menu router mapping
const breadcrumbNameMap = memoizeOneGetBreadcrumbNameMap(menuData);
yield put({
type: 'save',
payload: { menuData, breadcrumbNameMap },
});
},
*getUrlsData(state, { put, call }) {
const { data } = yield call(getAdminUrls);
// {'/user': true} map 便
const urlsData = {};
data.forEach(item => {
urlsData[item] = true;
});
yield put({
type: 'save',
payload: { urlsData },
});
},
},
reducers: {
save(state, action) {
save(state, { payload }) {
return {
...state,
...action.payload,
...payload,
};
},
},