@10yun/open-sdk
Version:
开放平台接入sdk
72 lines (70 loc) • 2.27 kB
JavaScript
import { StorageObj } from '../index.js';
const envArr = import.meta.env;
const currSign = envArr.VITE_SY_PRODUCT_SIGN;
import { isValidString } from './common.js';
/**
* 权限检查方法
* @param {String|Array} value
* @return
*/
function permission_auth(value) {
// 判断数据类型
let valueType = Object.prototype.toString.call(value);
// 如果 value 不是字符串或数组,直接返回 false
if (valueType != '[object String]' && valueType != '[object Array]') {
return false;
}
let rbacStr = StorageObj.localGet('syCacheAppRbac') || '';
// 如果是字符串,直接调用 permission_check
if (valueType == '[object String]') {
return permission_check(value, rbacStr);
}
// // 如果是数组,使用 every 方法,遇到第一个 false 就跳出
// if (valueType === '[object Array]') {
// return value.every((itemStr) => permission_check(itemStr));
// }
// 如果是数组,手动遍历,遇到第一个 false 就跳出
if (valueType === '[object Array]') {
for (const itemStr of value) {
if (!permission_check(itemStr, rbacStr)) {
return false; // 遇到 false 立即跳出
}
}
return true; // 所有元素都返回 true
}
// 默认返回 false
return false;
}
function permission_check(perms_key, init_rbac) {
// 开发调试
if (envArr.MODE == 'development' && envArr.VITE_APP_DEBUG === 'on') {
// console.log(envArr.MODE, envArr.VITE_APP_DEBUG, '----');
// if (!window.__POWERED_BY_QIANKUN__) {
return true;
// }
}
perms_key = perms_key || '';
perms_key = perms_key.trim();
if (perms_key == '') {
return false;
}
if (!perms_key.includes('@')) {
perms_key = `${currSign}@${perms_key}`;
}
// 获取权限
let rbacStr = init_rbac || StorageObj.localGet('syCacheAppRbac') || '';
// console.log('---rbacStr---', rbacStr);
rbacStr = rbacStr.trim();
// 权限为空
if (!isValidString(rbacStr)) {
return false;
}
// 权限判断-所有权限
if (rbacStr == '"all@all"' || rbacStr == 'all@all') {
return true;
}
// 分割,并且,清理空格
const rbacArr = rbacStr.split(',').map((item) => item.trim());
return rbacArr.includes(perms_key);
}
export { permission_auth, permission_check };