|
@@ -4,7 +4,7 @@
|
4
|
4
|
* https://github.com/ant-design/ant-design-pro-layout
|
5
|
5
|
*/
|
6
|
6
|
import ProLayout, { DefaultFooter } from '@ant-design/pro-layout';
|
7
|
|
-import React, { useEffect } from 'react';
|
|
7
|
+import React, { useEffect, useMemo } from 'react';
|
8
|
8
|
import { Link } from 'umi';
|
9
|
9
|
import { connect } from 'dva';
|
10
|
10
|
import { Icon, Result, Button } from 'antd';
|
|
@@ -26,13 +26,16 @@ const noMatch = (
|
26
|
26
|
/>
|
27
|
27
|
);
|
28
|
28
|
|
29
|
|
-/**
|
30
|
|
- * use Authorized check all menu item
|
31
|
|
- */
|
32
|
|
-const menuDataRender = (menuList) =>
|
|
29
|
+/** Use Authorized check all menu item */
|
|
30
|
+const menuDataRender = (menuRoles) => (menuList) =>
|
33
|
31
|
menuList.map((item) => {
|
34
|
|
- const localItem = { ...item, children: item.children ? menuDataRender(item.children) : [] };
|
35
|
|
- return Authorized.check(item.authority, localItem, null);
|
|
32
|
+ const needAuth = !!item.menuCode;
|
|
33
|
+
|
|
34
|
+ const authority =
|
|
35
|
+ (menuRoles.filter((x) => x.menuCode === item.menuCode)[0] || {}).roles || [];
|
|
36
|
+
|
|
37
|
+ const localItem = { ...item, children: item.children ? menuDataRender(menuRoles)(item.children) : [] };
|
|
38
|
+ return Authorized.check(needAuth ? authority : undefined, localItem, null);
|
36
|
39
|
});
|
37
|
40
|
|
38
|
41
|
const footerRender = () => {
|
|
@@ -55,6 +58,8 @@ const footerRender = () => {
|
55
|
58
|
|
56
|
59
|
const BasicLayout = (props) => {
|
57
|
60
|
const {
|
|
61
|
+ // user,
|
|
62
|
+ menus,
|
58
|
63
|
dispatch,
|
59
|
64
|
children,
|
60
|
65
|
settings,
|
|
@@ -72,9 +77,20 @@ const BasicLayout = (props) => {
|
72
|
77
|
}
|
73
|
78
|
}; // get children authority
|
74
|
79
|
|
75
|
|
- const authorized = getAuthorityFromRouter(props.route.routes, location.pathname || '/') || {
|
76
|
|
- authority: undefined,
|
77
|
|
- };
|
|
80
|
+ const authorized = useMemo(() => {
|
|
81
|
+ const routeItem = getAuthorityFromRouter(props.route.routes, location.pathname || '/')
|
|
82
|
+ if (!routeItem || !routeItem.menuCode) {
|
|
83
|
+ return {
|
|
84
|
+ authority: undefined,
|
|
85
|
+ };
|
|
86
|
+ }
|
|
87
|
+
|
|
88
|
+ const authority = (menus.filter((x) => x.menuCode === routeItem.menuCode)[0] || {}).roles;
|
|
89
|
+ return {
|
|
90
|
+ authority: authority && authority.length ? authority : ['any-string-for-no-right'],
|
|
91
|
+ };
|
|
92
|
+ })
|
|
93
|
+
|
78
|
94
|
|
79
|
95
|
return (
|
80
|
96
|
<ProLayout
|
|
@@ -112,7 +128,7 @@ const BasicLayout = (props) => {
|
112
|
128
|
);
|
113
|
129
|
}}
|
114
|
130
|
footerRender={footerRender}
|
115
|
|
- menuDataRender={menuDataRender}
|
|
131
|
+ menuDataRender={menuDataRender(menus)}
|
116
|
132
|
formatMessage={formatMessage}
|
117
|
133
|
rightContentRender={() => <RightContent />}
|
118
|
134
|
{...props}
|
|
@@ -125,7 +141,9 @@ const BasicLayout = (props) => {
|
125
|
141
|
);
|
126
|
142
|
};
|
127
|
143
|
|
128
|
|
-export default connect(({ global, settings }) => ({
|
|
144
|
+export default connect(({ global, settings, user }) => ({
|
129
|
145
|
collapsed: global.collapsed,
|
130
|
146
|
settings,
|
|
147
|
+ user: user.currentUser,
|
|
148
|
+ menus: user.menuList,
|
131
|
149
|
}))(BasicLayout);
|