|
|
|
@ -3,22 +3,35 @@ import RenderAuthorized from '@/components/Authorized'; |
|
|
|
import Exception from '@/components/Exception'; |
|
|
|
import { matchRoutes } from 'react-router-config'; |
|
|
|
import uniq from 'lodash/uniq'; |
|
|
|
import { formatMessage } from 'umi/locale'; |
|
|
|
import Link from 'umi/link'; |
|
|
|
|
|
|
|
const Authorized = RenderAuthorized(['admin', 'user']); |
|
|
|
const noMatch = <Exception type="403" style={{ minHeight: 500, height: '80%' }} />; |
|
|
|
|
|
|
|
export default ({ children, route, location }) => { |
|
|
|
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); |
|
|
|
if (Array.isArray(item.route.authority)) { |
|
|
|
authorities = authorities.concat(item.route.authority); |
|
|
|
} else if (typeof item.route.authority === 'string') { |
|
|
|
authorities.push(item.route.authority); |
|
|
|
} |
|
|
|
}); |
|
|
|
const noMatch = ( |
|
|
|
<Exception |
|
|
|
type="403" |
|
|
|
desc={formatMessage({ id: 'app.exception.description.403' }, {})} |
|
|
|
style={{ minHeight: 500, height: '80%' }} |
|
|
|
linkElement={Link} |
|
|
|
backText={formatMessage({ id: 'app.exception.back' })} |
|
|
|
/> |
|
|
|
); |
|
|
|
return ( |
|
|
|
<Authorized authority={uniq(authorities)} noMatch={noMatch}> |
|
|
|
<Authorized |
|
|
|
authority={authorities.length === 0 ? undefined : uniq(authorities)} |
|
|
|
noMatch={noMatch} |
|
|
|
> |
|
|
|
{children} |
|
|
|
</Authorized> |
|
|
|
); |
|
|
|
|