初次提交
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
import { computed } from 'vue'
|
||||
import { useAuth } from './useAuth'
|
||||
|
||||
export const usePermissions = () => {
|
||||
const auth = useAuth()
|
||||
|
||||
// 检查用户是否可以访问后台
|
||||
const canAccessAdmin = computed(() => {
|
||||
if (!auth.user.value) return false
|
||||
const role = auth.user.value.role
|
||||
return ['SONG_ADMIN', 'ADMIN', 'SUPER_ADMIN'].includes(role)
|
||||
})
|
||||
|
||||
// 检查用户是否可以访问指定页面
|
||||
const canAccessPage = (page: string): boolean => {
|
||||
if (!auth.user.value) return false
|
||||
|
||||
const role = auth.user.value.role
|
||||
|
||||
// 超级管理员可以访问所有页面
|
||||
if (role === 'SUPER_ADMIN') return true
|
||||
|
||||
// 管理员可以访问的页面
|
||||
if (role === 'ADMIN') {
|
||||
return ['overview', 'schedule', 'print', 'songs', 'users', 'data-analysis'].includes(page)
|
||||
}
|
||||
|
||||
// 歌曲管理员可以访问的页面
|
||||
if (role === 'SONG_ADMIN') {
|
||||
return ['schedule', 'print', 'songs'].includes(page)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// 获取用户可访问的页面列表
|
||||
const getUserPages = computed(() => {
|
||||
if (!auth.user.value) return []
|
||||
|
||||
const role = auth.user.value.role
|
||||
|
||||
switch (role) {
|
||||
case 'SUPER_ADMIN':
|
||||
return [
|
||||
'overview',
|
||||
'schedule',
|
||||
'print',
|
||||
'songs',
|
||||
'users',
|
||||
'notifications',
|
||||
'smtp-config',
|
||||
'playtimes',
|
||||
'request-times',
|
||||
'semesters',
|
||||
'blacklist',
|
||||
'site-config',
|
||||
'database',
|
||||
'api-keys'
|
||||
]
|
||||
case 'ADMIN':
|
||||
return ['overview', 'schedule', 'print', 'songs', 'users', 'data-analysis']
|
||||
case 'SONG_ADMIN':
|
||||
return ['schedule', 'print', 'songs']
|
||||
default:
|
||||
return []
|
||||
}
|
||||
})
|
||||
|
||||
// 角色检查
|
||||
const isUser = computed(() => auth.user.value?.role === 'USER')
|
||||
const isSongAdmin = computed(() => auth.user.value?.role === 'SONG_ADMIN')
|
||||
const isAdmin = computed(() => auth.user.value?.role === 'ADMIN')
|
||||
const isSuperAdmin = computed(() => auth.user.value?.role === 'SUPER_ADMIN')
|
||||
|
||||
// 权限组合检查
|
||||
const isAdminOrAbove = computed(() => {
|
||||
const role = auth.user.value?.role
|
||||
return ['ADMIN', 'SUPER_ADMIN'].includes(role)
|
||||
})
|
||||
|
||||
const isSongAdminOrAbove = computed(() => {
|
||||
const role = auth.user.value?.role
|
||||
return ['SONG_ADMIN', 'ADMIN', 'SUPER_ADMIN'].includes(role)
|
||||
})
|
||||
|
||||
// 检查是否可以管理用户角色
|
||||
const canManageUserRole = (targetRole: string): boolean => {
|
||||
if (!auth.user.value) return false
|
||||
|
||||
// 只有超级管理员可以分配角色
|
||||
if (auth.user.value.role === 'SUPER_ADMIN') {
|
||||
return ['USER', 'SONG_ADMIN', 'ADMIN'].includes(targetRole)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// 检查是否可以打印排期
|
||||
const canPrintSchedule = computed(() => {
|
||||
if (!auth.user.value) return false
|
||||
const role = auth.user.value.role
|
||||
return ['SONG_ADMIN', 'ADMIN', 'SUPER_ADMIN'].includes(role)
|
||||
})
|
||||
|
||||
return {
|
||||
// 页面访问权限
|
||||
canAccessAdmin,
|
||||
canAccessPage,
|
||||
getUserPages,
|
||||
|
||||
// 角色检查
|
||||
isUser,
|
||||
isSongAdmin,
|
||||
isAdmin,
|
||||
isSuperAdmin,
|
||||
isAdminOrAbove,
|
||||
isSongAdminOrAbove,
|
||||
|
||||
// 功能权限
|
||||
canPrintSchedule,
|
||||
|
||||
// 用户管理权限
|
||||
canManageUserRole
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user