You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
2.0 KiB
40 lines
2.0 KiB
import storage from './storage'; // 导入 storage 工具模块,用于操作本地存储
|
|
import menu from './menu'; // 导入 menu 工具模块,用于获取菜单数据
|
|
|
|
/**
|
|
* 是否有权限
|
|
* @param {*} tableName 表名,用于匹配菜单中的表名
|
|
* @param {*} key 权限按钮名称,用于检查用户是否有该权限
|
|
*/
|
|
export function isAuth(tableName, key) { // 定义 isAuth 函数,用于检查用户是否有指定权限
|
|
let role = storage.get("role"); // 从本地存储中获取当前用户角色
|
|
if (!role) { // 如果未获取到角色
|
|
role = '管理员'; // 默认设置为“管理员”
|
|
}
|
|
let menus = menu.list(); // 获取菜单列表数据
|
|
for (let i = 0; i < menus.length; i++) { // 遍历菜单列表
|
|
if (menus[i].roleName == role) { // 如果当前菜单的角色与用户角色匹配
|
|
for (let j = 0; j < menus[i].backMenu.length; j++) { // 遍历后台菜单
|
|
for (let k = 0; k < menus[i].backMenu[j].child.length; k++) { // 遍历子菜单
|
|
if (tableName == menus[i].backMenu[j].child[k].tableName) { // 如果表名匹配
|
|
let buttons = menus[i].backMenu[j].child[k].buttons.join(','); // 将按钮权限数组转为逗号分隔的字符串
|
|
return buttons.indexOf(key) !== -1 || false; // 检查权限按钮是否存在于按钮权限字符串中,返回布尔值
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 注释掉的代码部分:另一种实现方式,逻辑类似
|
|
// for(let i=0;i<menus.length;i++){
|
|
// if(menus[i].roleName==role){
|
|
// for(let j=0;j<menus[i].backMenu.length;j++){
|
|
// if(menus[i].backMenu[j].tableName==tableName){
|
|
// let buttons = menus[i].backMenu[j].child[0].buttons.join(',');
|
|
// return buttons.indexOf(key) !== -1 || false
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
return false; // 如果未找到匹配的权限,返回 false
|
|
}
|