Files
one-pipe-system/src/composables/usePermission.ts
2026-09-10 16:50:06 +08:00

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
}
}