// Admin role-based access control export function getCurrentAdminRole(): string { // 从本地存储获取当前 role。为不影响全局,优先读 admin_role,默认降级到读全局 role/userInfo,再默认 // 根据实际系统中的 token/userInfo 结构可灵活调整 const roleType = uni.getStorageSync('admin_role') as string if (roleType && typeof roleType === 'string' && roleType.length > 0) { return roleType } // 检查是否有关联 merchant_id 或者是存了全局 role const merchantId = uni.getStorageSync('merchant_id') if (merchantId) return 'merchant' const globalRole = uni.getStorageSync('role') as string if (globalRole && typeof globalRole === 'string' && globalRole.length > 0) { return globalRole } return 'admin' // 默认返回 admin 作为兜底(兼容原有全部显示逻辑) } // 获取不同 role 允许访问的顶级模块 ID (主侧边栏的顶层菜单 id) export function getVisibleTopMenuIds(role: string): string[] { if (role === 'admin') { return ['home', 'user', 'order', 'product', 'marketing', 'distribution', 'kefu', 'finance', 'cms', 'decoration', 'app', 'setting', 'maintain'] } if (role === 'merchant') { // merchant: 只能看到 主页、订单、商品、营销、财务 return ['home', 'order', 'product', 'marketing', 'finance'] } // 其他 role: 安全兜底 return ['home'] } // 判断是否有权限访问某模块或路由 export function hasAdminModuleAccess(moduleId: string | undefined): boolean { if (!moduleId) return true // 没有指定的通常认为是公共的,比如一些通用组件 const role = getCurrentAdminRole() if (role === 'admin') return true // 对于 merchant 角色,允许其访问的顶级 menu id 及其所属路由 if (role === 'merchant') { const allowed = ['home', 'order', 'product', 'marketing', 'finance'] return allowed.includes(moduleId) } return false }