60 lines
2.2 KiB
JavaScript
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);
|
|
}
|