import React from 'react'; import { CURRENT } from './renderAuthorize'; import PromiseRender from './PromiseRender'; const checkPermissions = (authority, currentAuthority, target, Exception) => { if (!authority) { return target; } if (Array.isArray(authority)) { if (Array.isArray(currentAuthority)) { if (currentAuthority.some(item => authority.includes(item))) { return target; } } else if (authority.includes(currentAuthority)) { return target; } return Exception; } // string 处理 if (typeof authority === 'string') { if (Array.isArray(currentAuthority)) { if (currentAuthority.some(item => authority === item)) { return target; } } else if (authority === currentAuthority) { return target; } return Exception; } // Promise 处理 if (authority instanceof Promise) { return <PromiseRender ok={target} error={Exception} promise={authority} />; } // Function 处理 if (typeof authority === 'function') { const bool = authority(currentAuthority); // 函数执行后返回值是 Promise if (bool instanceof Promise) { return <PromiseRender ok={target} error={Exception} promise={bool} />; } if (bool) { return target; } return Exception; } throw new Error('unsupported parameters'); }; function check(authority, target, Exception) { return checkPermissions(authority, CURRENT, target, Exception); } export default check;