diff --git a/src/utils/authority.js b/src/utils/authority.js index 8cd98658aadd4494c98ab201af39679bf9e7311a..3d2e7b34961a0b6fdf2a705d040f9726d9981065 100644 --- a/src/utils/authority.js +++ b/src/utils/authority.js @@ -1,24 +1,22 @@ -import { isJsonString } from '@/utils/utils'; - // use localStorage to store the authority info, which might be sent from server in actual project. -export function getAuthority() { +export function getAuthority(str) { // return localStorage.getItem('antd-pro-authority') || ['admin', 'user']; - const authorityString = localStorage.getItem('antd-pro-authority'); + const authorityString = + typeof str === 'undefined' ? localStorage.getItem('antd-pro-authority') : str; + // authorityString could be admin, "admin", ["admin"] let authority; - if (isJsonString(authorityString)) { + try { authority = JSON.parse(authorityString); - } else { - authority = [authorityString]; + } catch (e) { + authority = authorityString; + } + if (typeof authority === 'string') { + return [authority]; } return authority || ['admin']; } export function setAuthority(authority) { - let authorityString; - if (isJsonString(authority)) { - authorityString = JSON.stringify(authority); - } else { - authorityString = [authority]; - } - return localStorage.setItem('antd-pro-authority', authorityString); + const proAuthority = typeof authority === 'string' ? [authority] : authority; + return localStorage.setItem('antd-pro-authority', JSON.stringify(proAuthority)); } diff --git a/src/utils/authority.test.js b/src/utils/authority.test.js new file mode 100644 index 0000000000000000000000000000000000000000..8a6cd41f37f9c797adaef9304f87fe3afd279123 --- /dev/null +++ b/src/utils/authority.test.js @@ -0,0 +1,19 @@ +import { getAuthority } from './authority'; + +describe('getAuthority should be strong', () => { + it('empty', () => { + expect(getAuthority(null)).toEqual(['admin']); // default value + }); + it('string', () => { + expect(getAuthority('admin')).toEqual(['admin']); + }); + it('array with double quotes', () => { + expect(getAuthority('"admin"')).toEqual(['admin']); + }); + it('array with single item', () => { + expect(getAuthority('["admin"]')).toEqual(['admin']); + }); + it('array with multiple items', () => { + expect(getAuthority('["admin", "guest"]')).toEqual(['admin', 'guest']); + }); +}); diff --git a/src/utils/utils.js b/src/utils/utils.js index bd47dbf7163c8f2efad2c604c63cf0410335bfdd..3c795c2221ff1e2f03b603c2c2bed5491f2d3e55 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -181,14 +181,3 @@ 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; -}