添加 vue-router 依赖并配置路由,重构登录组件,完善 HTTP 请求拦截器以支持 token 刷新机制
This commit is contained in:
148
src/utils/permission.js
Normal file
148
src/utils/permission.js
Normal file
@@ -0,0 +1,148 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user