import { reloadAuthorized } from './Authorized'; // use localStorage to store the authority info, which might be sent from server in actual project. export function getAuthority(): string | string[] { // const authorityString = // typeof str === 'undefined' && localStorage ? localStorage.getItem('antd-pro-authority') : str; // // authorityString could be admin, "admin", ["admin"] // let authority; // try { // if (authorityString) { // authority = JSON.parse(authorityString); // } // } catch (e) { // authority = authorityString; // } // if (typeof authority === 'string') { // return [authority]; // } // // preview.pro.ant.design only do not use in your production. // // preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。 // if (!authority && ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site') { // return ['admin']; // } // return authority; const storage = localStorage.getItem('hsweb-autz'); if (storage) { try { const autz = storage && JSON.parse(storage) let authority = []; if (autz.currentAuthority) { authority = autz.currentAuthority; } else { authority = autz.permissions.map((item: any) => item.id); } return authority; } catch (error) { localStorage.removeItem('hsweb-autz'); location.reload(); return ['guest']; } } else { return ['guest']; } } export function setAuthority(authority: string | string[]): void { const proAuthority = typeof authority === 'string' ? [authority] : authority; localStorage.setItem('antd-pro-authority', JSON.stringify(proAuthority)); // auto reload reloadAuthorized(); } // 用户 export class User { public readonly id: string; public readonly name: string; public readonly username: string; public readonly ext: {}; constructor({ id, name, username, ext = {} }: User) { this.id = id; this.name = name; this.username = username; this.ext = ext; } } // 角色 export class Role { public readonly id: string; public readonly name: string; constructor({ id, name }: Role) { this.id = id; this.name = name; } } // 权限 export class Permission { public id: string; public name: string; public actions: string[]; public dataAccesses: DataAcctessConfig[]; constructor({ id, name, actions, dataAccesses }: Permission) { this.id = id; this.name = name; this.actions = actions; this.dataAccesses = dataAccesses; } public hasAction(action: string): boolean { return this.actions.includes(action); } public hasAnyAction([...actionArr]): boolean { return this.actions.filter(act => actionArr.includes(act)).length > 0; } public hasActions([...actionArr]): boolean { const len = this.actions.filter(act => actionArr.includes(act)).length; return len === actionArr.length; } } // 数据权限配置 export class DataAcctessConfig { public action: string; public type: string; public config: any; constructor({ action, type, ...config }: DataAcctessConfig) { this.action = action; this.config = config; this.type = type; } } export class Authentication { public user: User; public roles: Role[]; public permissions: Permission[]; constructor({ user, roles, permissions }: Authentication) { this.user = user; this.roles = roles; this.permissions = permissions; } public getPermission(permission: string): Permission | undefined { return this.permissions.find(per => per.id === permission); } public getRole(roleId: string): Role | undefined { return this.roles.find(_role => _role.id === roleId); } public hasRole(roleId: string): boolean { return this.getRole(roleId) !== undefined; } public hasAnyRole([...roles]): boolean { return this.roles.find(_role => roles.includes(_role.id)) !== undefined; } public hasPermission([permission, ...actions]: string[]): boolean { return this.getPermission(permission)!.hasActions(actions); } public hasAnyPermission([...permission]: string[]): boolean { return this.permissions.find(per => permission.includes(per.id)) !== undefined; } } export function getAccessToken(): string { return localStorage.getItem('x-access-token') || 'null'; } export function setAccessToken(token: string) { localStorage.setItem('x-access-token', token); } export function getAutz(): Authentication | undefined { if (!window.top.hsweb_autz) { const store = localStorage.getItem('hsweb-autz'); if (store === null) { return undefined; } const authJson = JSON.parse(store); const autz = new Authentication(authJson); window.top.hsweb_autz = autz; } return window.top.hsweb_autz; } export function clearAutz() { window.top.hsweb_autz = undefined; localStorage.removeItem('hsweb-autz'); localStorage.removeItem('x-access-token'); } export function setAutz(info: Authentication): Authentication { window.top.hsweb_autz = new Authentication(info); const autz = new Authentication(info); if (JSON.stringify(info) !== 'undefined') { localStorage.setItem('hsweb-autz', JSON.stringify(info)); } return autz; }