From 77d714f2f0eac9401687f389158fd7378aa22bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=B8=85?= Date: Wed, 12 Sep 2018 13:55:30 +0800 Subject: [PATCH] fix authority parse error --- src/components/Exception/index.d.ts | 1 + src/components/Exception/index.en-US.md | 3 ++- src/components/Exception/index.js | 6 ++++-- src/components/Exception/index.zh-CN.md | 1 + src/pages/Authorized.js | 5 +++-- src/utils/authority.js | 14 +++++++++++--- src/utils/utils.js | 11 +++++++++++ 7 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/components/Exception/index.d.ts b/src/components/Exception/index.d.ts index cf40d6ac..d62c1771 100644 --- a/src/components/Exception/index.d.ts +++ b/src/components/Exception/index.d.ts @@ -9,6 +9,7 @@ export interface IExceptionProps { style?: React.CSSProperties; className?: string; backText?: React.ReactNode; + redirect?: string; } export default class Exception extends React.Component {} diff --git a/src/components/Exception/index.en-US.md b/src/components/Exception/index.en-US.md index 10f23a0a..37e7e807 100644 --- a/src/components/Exception/index.en-US.md +++ b/src/components/Exception/index.en-US.md @@ -16,4 +16,5 @@ title | title | ReactNode | - desc | supplementary description | ReactNode | - img | the url of background image | string | - actions | suggested operations, a default 'Home' link will show if not set | ReactNode | - -linkElement | to specify the element of link | string\|ReactElement | 'a' \ No newline at end of file +linkElement | to specify the element of link | string\|ReactElement | 'a' +redirect | redirect path | string | '/' \ No newline at end of file diff --git a/src/components/Exception/index.js b/src/components/Exception/index.js index 5291d579..2c7223cc 100644 --- a/src/components/Exception/index.js +++ b/src/components/Exception/index.js @@ -7,6 +7,7 @@ import styles from './index.less'; class Exception extends React.PureComponent { static defaultProps = { backText: 'back to home', + redirect: '/', }; constructor(props) { @@ -24,6 +25,7 @@ class Exception extends React.PureComponent { desc, img, actions, + redirect, ...rest } = this.props; const pageType = type in config ? type : '404'; @@ -44,8 +46,8 @@ class Exception extends React.PureComponent { createElement( linkElement, { - to: '/', - href: '/', + to: redirect, + href: redirect, }, )} diff --git a/src/components/Exception/index.zh-CN.md b/src/components/Exception/index.zh-CN.md index bc7e5f1d..2e64399f 100644 --- a/src/components/Exception/index.zh-CN.md +++ b/src/components/Exception/index.zh-CN.md @@ -18,3 +18,4 @@ order: 5 | img | 背景图片地址 | string| -| | actions | 建议操作,配置此属性时默认的『返回首页』按钮不生效| ReactNode| -| | linkElement | 定义链接的元素 | string\|ReactElement | 'a' | +| redirect | 返回按钮的跳转地址 | string | '/' diff --git a/src/pages/Authorized.js b/src/pages/Authorized.js index 238888a7..e1ad24a1 100644 --- a/src/pages/Authorized.js +++ b/src/pages/Authorized.js @@ -15,12 +15,13 @@ export default ({ children }) => { type="403" desc={formatMessage({ id: 'app.exception.description.403' })} linkElement={Link} - backText={formatMessage({ id: 'app.exception.back' })} + redirect="/user/login" + backText="back to login" /> ); // if Authority === ['guest'] redirect to /user/login // You can implement the logic here. - if (Authority.join('') === 'guest') { + if (Authority === 'guest' || Authority.join('') === 'guest') { noMatch = ; } return ( diff --git a/src/utils/authority.js b/src/utils/authority.js index d595df32..8cd98658 100644 --- a/src/utils/authority.js +++ b/src/utils/authority.js @@ -1,16 +1,24 @@ +import { isJsonString } from '@/utils/utils'; + // use localStorage to store the authority info, which might be sent from server in actual project. export function getAuthority() { // return localStorage.getItem('antd-pro-authority') || ['admin', 'user']; const authorityString = localStorage.getItem('antd-pro-authority'); let authority; - try { + if (isJsonString(authorityString)) { authority = JSON.parse(authorityString); - } catch (e) { + } else { authority = [authorityString]; } return authority || ['admin']; } export function setAuthority(authority) { - return localStorage.setItem('antd-pro-authority', JSON.stringify(authority)); + let authorityString; + if (isJsonString(authority)) { + authorityString = JSON.stringify(authority); + } else { + authorityString = [authority]; + } + return localStorage.setItem('antd-pro-authority', authorityString); } diff --git a/src/utils/utils.js b/src/utils/utils.js index 3c795c22..bd47dbf7 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -181,3 +181,14 @@ export function formatWan(val) { export function isAntdPro() { return window.location.hostname === 'preview.pro.ant.design'; } + +export function isJsonString(str) { + try { + if (typeof JSON.parse(str) === 'object') { + return true; + } + } catch (e) { + return false; + } + return false; +} -- GitLab