149 lines
4.0 KiB
JavaScript
149 lines
4.0 KiB
JavaScript
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',
|
|
}
|
|
|
|
// 角色权限映射
|
|
export const ROLE_PERMISSIONS = {
|
|
ADMIN: [
|
|
// 管理员拥有所有权限
|
|
PERMISSIONS.USER_MANAGE,
|
|
PERMISSIONS.USER_CREATE,
|
|
PERMISSIONS.USER_UPDATE,
|
|
PERMISSIONS.USER_DELETE,
|
|
PERMISSIONS.USER_VIEW,
|
|
PERMISSIONS.GAME_MANAGE,
|
|
PERMISSIONS.GAME_CREATE,
|
|
PERMISSIONS.GAME_UPDATE,
|
|
PERMISSIONS.GAME_DELETE,
|
|
PERMISSIONS.GAME_VIEW,
|
|
PERMISSIONS.ORDER_MANAGE,
|
|
PERMISSIONS.ORDER_VIEW,
|
|
PERMISSIONS.REPORT_VIEW,
|
|
PERMISSIONS.SETTING_MANAGE,
|
|
],
|
|
AGENT: [
|
|
// 代理商只有查看权限,没有管理权限
|
|
PERMISSIONS.GAME_VIEW,
|
|
PERMISSIONS.ORDER_VIEW,
|
|
PERMISSIONS.REPORT_VIEW,
|
|
]
|
|
}
|
|
|
|
// 路由权限映射
|
|
export const ROUTE_PERMISSIONS = {
|
|
'Dashboard': [], // 仪表盘所有用户都可以访问
|
|
'Users': [PERMISSIONS.USER_VIEW],
|
|
'Games': [PERMISSIONS.GAME_VIEW],
|
|
'Orders': [PERMISSIONS.ORDER_VIEW],
|
|
'Reports': [PERMISSIONS.REPORT_VIEW],
|
|
'Settings': [PERMISSIONS.SETTING_MANAGE],
|
|
'ErrorTest': [], // 错误测试页面所有用户都可以访问
|
|
'PermissionTest': [], // 权限测试页面所有用户都可以访问
|
|
}
|
|
|
|
// 获取当前用户信息
|
|
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', '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
|
|
}
|