182 lines
4.9 KiB
JavaScript
182 lines
4.9 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',
|
|
|
|
// 链接管理权限
|
|
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
|
|
}
|