import { getAuth } from './auth' // 权限定义 export const PERMISSIONS = { // 用户管理权限 USER_MANAGE: 'user:manage', USER_CREATE: 'user:create', USER_UPDATE: 'user:update', USER_DELETE: 'user:delete', USER_VIEW: 'user:view', // 游戏管理权限 GAME_MANAGE: 'game:manage', GAME_CREATE: 'game:create', GAME_UPDATE: 'game:update', GAME_DELETE: 'game:delete', GAME_VIEW: 'game:view', // 订单管理权限 ORDER_MANAGE: 'order:manage', ORDER_VIEW: 'order:view', // 报表分析权限 REPORT_VIEW: 'report:view', // 系统设置权限 SETTING_MANAGE: 'setting:manage', // 链接管理权限 LINK_MANAGE: 'link:manage', LINK_CREATE: 'link:create', LINK_UPDATE: 'link:update', LINK_DELETE: 'link:delete', LINK_VIEW: 'link:view', // 二维码权限 QR_GENERATE: 'qr:generate', QR_VIEW: 'qr:view', // 公告管理权限 ANNOUNCEMENT_MANAGE: 'announcement:manage', ANNOUNCEMENT_CREATE: 'announcement:create', ANNOUNCEMENT_UPDATE: 'announcement:update', ANNOUNCEMENT_DELETE: 'announcement:delete', ANNOUNCEMENT_VIEW: 'announcement:view', // 退单管理权限 REFUND_MANAGE: 'refund:manage', REFUND_EXECUTE: 'refund:execute', REFUND_VIEW: 'refund:view', // 设备状态查看 DEVICE_VIEW: 'device:view', } // 角色权限映射 export const ROLE_PERMISSIONS = { ADMIN: [ // 管理员拥有所有权限 PERMISSIONS.USER_MANAGE, PERMISSIONS.USER_CREATE, PERMISSIONS.USER_UPDATE, PERMISSIONS.USER_DELETE, PERMISSIONS.USER_VIEW, PERMISSIONS.SETTING_MANAGE, PERMISSIONS.LINK_MANAGE, PERMISSIONS.LINK_CREATE, PERMISSIONS.LINK_UPDATE, PERMISSIONS.LINK_DELETE, PERMISSIONS.LINK_VIEW, PERMISSIONS.QR_GENERATE, PERMISSIONS.QR_VIEW, PERMISSIONS.ANNOUNCEMENT_MANAGE, PERMISSIONS.ANNOUNCEMENT_CREATE, PERMISSIONS.ANNOUNCEMENT_UPDATE, PERMISSIONS.ANNOUNCEMENT_DELETE, PERMISSIONS.ANNOUNCEMENT_VIEW, PERMISSIONS.REFUND_MANAGE, PERMISSIONS.REFUND_EXECUTE, PERMISSIONS.REFUND_VIEW, ], AGENT: [ // 代理商只有查看权限,没有管理权限 PERMISSIONS.LINK_VIEW, PERMISSIONS.QR_VIEW, PERMISSIONS.ANNOUNCEMENT_VIEW, PERMISSIONS.REFUND_VIEW, PERMISSIONS.REFUND_EXECUTE, // 代理可以执行退单操作 ] } // 路由权限映射 export const ROUTE_PERMISSIONS = { 'Users': [PERMISSIONS.USER_VIEW], 'Settings': [PERMISSIONS.SETTING_MANAGE], 'Links': [PERMISSIONS.LINK_VIEW], 'Refund': [PERMISSIONS.REFUND_VIEW], 'Announcements': [PERMISSIONS.ANNOUNCEMENT_VIEW], 'DeviceStatus': [PERMISSIONS.DEVICE_VIEW], } // 获取当前用户信息 export function getCurrentUser() { const auth = getAuth() const user = auth?.user || null return user } // 获取当前用户类型 export function getCurrentUserType() { const user = getCurrentUser() const userType = user?.userType || null return userType } // 检查用户是否有指定权限 export function hasPermission(permission) { const userType = getCurrentUserType() if (!userType) return false const userPermissions = ROLE_PERMISSIONS[userType?.toUpperCase()] || [] return userPermissions.includes(permission) } // 检查用户是否有指定权限列表中的任意一个 export function hasAnyPermission(permissions) { return permissions.some(permission => hasPermission(permission)) } // 检查用户是否有指定权限列表中的所有权限 export function hasAllPermissions(permissions) { return permissions.every(permission => hasPermission(permission)) } // 检查用户是否可以访问指定路由 export function canAccessRoute(routeName) { // 管理员可以访问所有路由 if (isAdmin()) return true const requiredPermissions = ROUTE_PERMISSIONS[routeName] || [] if (requiredPermissions.length === 0) return true // 没有权限要求,默认允许访问 return hasAnyPermission(requiredPermissions) } // 检查用户是否为管理员 export function isAdmin() { const userType = getCurrentUserType() const isAdminUser = userType?.toLowerCase() === 'admin' return isAdminUser } // 检查用户是否为代理商 export function isAgent() { return getCurrentUserType()?.toLowerCase() === 'agent' } // 获取用户可访问的路由列表 export function getAccessibleRoutes() { const userType = getCurrentUserType() if (!userType) { return [] } // 管理员可以访问所有路由 if (isAdmin()) { return ['Dashboard', 'Users', 'Games', 'Orders', 'Reports', 'Settings', 'Links', 'Announcements', 'ErrorTest', 'PermissionTest'] } const userPermissions = ROLE_PERMISSIONS[userType?.toUpperCase()] || [] const accessibleRoutes = [] Object.entries(ROUTE_PERMISSIONS).forEach(([routeName, requiredPermissions]) => { if (requiredPermissions.length === 0 || hasAnyPermission(requiredPermissions)) { accessibleRoutes.push(routeName) } }) return accessibleRoutes }