staff/utils/permission.js

60 lines
2.2 KiB
JavaScript

/**
* 权限管理工具
* 用于处理应用中的权限控制逻辑
*/
// 权限信息 F1.核销 F2.配送 F3.推广 F4.量房 F5.家政 F6.维修
// 权限映射对象:将前端菜单/功能类型映射到权限代码
export const permissionMap = {
// 功能权限映射
'verification': 'F1', // 商品核销 - F1.核销
'delivery': 'F2', // 配送 - F2.配送
'invite': 'F3', // 推广 - F3.推广
'measure': 'F4', // 量房 - F4.量房
'repair': 'F6', // 维修 - F6.维修
// 可以根据需要添加更多菜单与权限的映射关系
}
/**
* 判断当前用户是否拥有指定功能的权限
* @param {String} featureType - 功能/菜单类型
* @param {Array} userPermissions - 用户拥有的权限数组
* @returns {Boolean} - 是否拥有权限
*/
export function hasPermission(featureType, userPermissions) {
// 如果功能类型不在权限映射中,表示不需要权限控制,直接显示
if (!permissionMap[featureType]) return true;
// 如果没有权限数组或权限数组为空,则没有权限
if (!userPermissions || userPermissions.length === 0) return false;
// 检查权限数组中是否包含该功能所需的权限
return userPermissions.includes(permissionMap[featureType]);
}
/**
* 过滤菜单或功能列表,只返回用户有权限访问的项
* @param {Array} menuList - 菜单或功能列表
* @param {Array} userPermissions - 用户拥有的权限数组
* @param {String} typeKey - 菜单项中表示功能类型的键名,默认为'type'
* @returns {Array} - 过滤后的菜单列表
*/
export function filterByPermission(menuList, userPermissions, typeKey = 'type') {
if (!menuList || !Array.isArray(menuList)) return [];
return menuList.filter(item => {
const featureType = item[typeKey];
return hasPermission(featureType, userPermissions);
});
}
/**
* 根据权限代码获取对应的功能类型列表
* @param {String} permissionCode - 权限代码
* @returns {Array} - 拥有该权限的功能类型列表
*/
export function getFeaturesByPermission(permissionCode) {
return Object.entries(permissionMap)
.filter(([_, code]) => code === permissionCode)
.map(([featureType]) => featureType);
}