import React from 'react'
import { CURRENT } from './renderAuthorize' // eslint-disable-next-line import/no-cycle
import PromiseRender from './PromiseRender'
/**
* 通用权限检查方法
* Common check permissions method
* @param { 权限判定 | Permission judgment } authority
* @param { 你的权限 | Your permission description } currentAuthority
* @param { 通过的组件 | Passing components } target
* @param { 未通过的组件 | no pass components } Exception
*/
const checkPermissions = (authority, currentAuthority, target, Exception) => {
// 没有判定权限.默认查看所有
// Retirement authority, return target;
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
} // Function 处理
if (typeof authority === 'function') {
const bool = authority(currentAuthority) // 函数执行后返回值是 Promise
if (bool instanceof Promise) {
return
}
if (bool) {
return target
}
return Exception
}
throw new Error('unsupported parameters')
}
export { checkPermissions }
function check(authority, target, Exception) {
return checkPermissions(authority, CURRENT, target, Exception)
}
export default check