Files
login_task_web/src/utils/permission.js

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
}