92 lines
2.2 KiB
TypeScript
92 lines
2.2 KiB
TypeScript
/**
|
|
* 权限检查 Composable
|
|
* 用于在模板或脚本中检查用户权限
|
|
*/
|
|
|
|
import { computed } from 'vue'
|
|
import { useUserStore } from '@/store/modules/user'
|
|
|
|
export function usePermission() {
|
|
const userStore = useUserStore()
|
|
|
|
// 权限列表
|
|
const permissions = computed(() => userStore.permissions)
|
|
|
|
// 按钮权限列表
|
|
const buttons = computed(() => userStore.buttons)
|
|
|
|
// 是否是超级管理员
|
|
const isSuperAdmin = computed(() => userStore.isSuperAdmin)
|
|
|
|
// 是否是超级管理员或平台用户
|
|
const isPlatformAccount = computed(() => [1, 2].includes(Number(userStore.info.user_type)))
|
|
|
|
/**
|
|
* 检查是否有指定权限
|
|
* @param permission 权限码
|
|
* @returns 是否有权限
|
|
*/
|
|
const hasPermission = (permission: string): boolean => {
|
|
return userStore.hasPermission(permission)
|
|
}
|
|
|
|
/**
|
|
* 检查是否有任意一个权限
|
|
* @param perms 权限码数组
|
|
* @returns 是否有权限
|
|
*/
|
|
const hasAnyPermission = (perms: string[]): boolean => {
|
|
return userStore.hasAnyPermission(perms)
|
|
}
|
|
|
|
/**
|
|
* 检查是否有所有权限
|
|
* @param perms 权限码数组
|
|
* @returns 是否有权限
|
|
*/
|
|
const hasAllPermissions = (perms: string[]): boolean => {
|
|
return userStore.hasAllPermissions(perms)
|
|
}
|
|
|
|
/**
|
|
* 检查是否有菜单权限
|
|
* @param menuCode 菜单码
|
|
* @returns 是否有权限
|
|
*/
|
|
const hasMenuPermission = (menuCode: string): boolean => {
|
|
return hasPermission(`menu:${menuCode}`)
|
|
}
|
|
|
|
/**
|
|
* 检查是否有按钮权限(从 permissions 数组检查)
|
|
* @param buttonCode 按钮码
|
|
* @returns 是否有权限
|
|
*/
|
|
const hasButtonPermission = (buttonCode: string): boolean => {
|
|
return hasPermission(buttonCode)
|
|
}
|
|
|
|
/**
|
|
* 检查是否有按钮权限(从 buttons 数组检查)
|
|
* @param buttonCode 按钮权限码
|
|
* @returns 是否有权限
|
|
*/
|
|
const hasButton = (buttonCode: string): boolean => {
|
|
return userStore.hasButton(buttonCode)
|
|
}
|
|
|
|
return {
|
|
permissions,
|
|
buttons,
|
|
isSuperAdmin,
|
|
isPlatformAccount,
|
|
hasPermission,
|
|
hasAnyPermission,
|
|
hasAllPermissions,
|
|
hasMenuPermission,
|
|
hasButtonPermission,
|
|
hasButton
|
|
}
|
|
}
|
|
|