106 lines
2.7 KiB
JavaScript
106 lines
2.7 KiB
JavaScript
// 硬编码的四个角色配置
|
|
const ROLES = {
|
|
USER: {
|
|
displayName: '普通用户',
|
|
description: '普通用户,只能访问主页功能',
|
|
pages: [], // 不能访问后台页面
|
|
canAccessAdmin: false
|
|
},
|
|
SONG_ADMIN: {
|
|
displayName: '歌曲管理员',
|
|
description: '负责歌曲和排期管理',
|
|
pages: [
|
|
'schedule', // 排期管理
|
|
'print', // 打印排期
|
|
'songs' // 歌曲管理
|
|
],
|
|
canAccessAdmin: true
|
|
},
|
|
ADMIN: {
|
|
displayName: '管理员',
|
|
description: '系统管理员,拥有大部分权限',
|
|
pages: [
|
|
'overview', // 数据概览
|
|
'schedule', // 排期管理
|
|
'print', // 打印排期
|
|
'songs', // 歌曲管理
|
|
'users', // 用户管理
|
|
'data-analysis' // 数据分析
|
|
],
|
|
canAccessAdmin: true
|
|
},
|
|
SUPER_ADMIN: {
|
|
displayName: '超级管理员',
|
|
description: '拥有所有权限的超级管理员',
|
|
pages: [
|
|
'overview', // 数据概览
|
|
'schedule', // 排期管理
|
|
'print', // 打印排期
|
|
'songs', // 歌曲管理
|
|
'users', // 用户管理
|
|
'notifications', // 通知管理
|
|
'playtimes', // 播出时段
|
|
'semesters', // 学期管理
|
|
'blacklist', // 黑名单管理
|
|
'site-config', // 站点配置
|
|
'database', // 数据库操作
|
|
'data-analysis' // 数据分析
|
|
],
|
|
canAccessAdmin: true
|
|
}
|
|
}
|
|
|
|
// 检查用户是否可以访问后台
|
|
function canAccessAdmin(user) {
|
|
if (!user || !user.role) return false
|
|
|
|
const roleConfig = ROLES[user.role]
|
|
if (!roleConfig) return false
|
|
|
|
return roleConfig.canAccessAdmin
|
|
}
|
|
|
|
// 检查用户是否可以访问指定页面
|
|
function canAccessPage(user, page) {
|
|
if (!user || !user.role) return false
|
|
|
|
// 超级管理员可以访问所有页面
|
|
if (user.role === 'SUPER_ADMIN') return true
|
|
|
|
const roleConfig = ROLES[user.role]
|
|
if (!roleConfig) return false
|
|
|
|
return roleConfig.pages.includes(page)
|
|
}
|
|
|
|
// 获取用户可访问的页面列表
|
|
function getUserPages(user) {
|
|
if (!user || !user.role) return []
|
|
|
|
const roleConfig = ROLES[user.role]
|
|
if (!roleConfig) return []
|
|
|
|
return roleConfig.pages
|
|
}
|
|
|
|
// 获取角色信息
|
|
function getRoleInfo(roleName) {
|
|
return ROLES[roleName] || null
|
|
}
|
|
|
|
// 检查用户是否可以管理其他用户角色
|
|
function canManageUserRole(currentUser, targetRole) {
|
|
if (!currentUser || !currentUser.role) return false
|
|
|
|
// 只有超级管理员可以分配角色
|
|
if (currentUser.role === 'SUPER_ADMIN') {
|
|
// 超级管理员可以分配除自己以外的所有角色
|
|
return ['USER', 'SONG_ADMIN', 'ADMIN'].includes(targetRole)
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// 导出所有函数和常量
|
|
export { ROLES, canAccessAdmin, canAccessPage, getUserPages, getRoleInfo, canManageUserRole }
|