Files
one-pipe-system/src/composables/useAuth.ts
sexygoat 8df7024a45
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m13s
modify
2026-04-02 13:42:57 +08:00

54 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { useUserStore } from '@/store/modules/user'
/**
* 权限判断组合式函数
* 用于在 setup 函数或表格 formatter 中判断权限
*
* 用法:
* const { hasAuth, hasAllAuth } = useAuth()
* hasAuth('role:add') // 检查是否拥有权限
* hasAuth(['role:add', 'role:edit']) // 检查是否拥有任意一个权限
* hasAllAuth(['role:add', 'role:edit']) // 检查是否拥有全部权限
*/
export const useAuth = () => {
const userStore = useUserStore()
/**
* 检查是否有指定权限(满足任意一个即可)
* @param permission 权限标识,可以是字符串或字符串数组
* @returns 是否有权限
*/
const hasAuth = (permission: string | string[]): boolean => {
if (!permission) return false
if (typeof permission === 'string') {
// 单个权限(同时检查 permissions 和 buttons
return userStore.hasPermission(permission) || userStore.hasButton(permission)
}
if (Array.isArray(permission)) {
// 多个权限(满足任意一个即可)
return permission.some((perm) => userStore.hasPermission(perm) || userStore.hasButton(perm))
}
return false
}
/**
* 检查是否有所有指定权限(需要全部满足)
* @param permissions 权限标识数组
* @returns 是否有全部权限
*/
const hasAllAuth = (permissions: string[]): boolean => {
if (!permissions || !Array.isArray(permissions)) return false
// 需要全部满足
return permissions.every((perm) => userStore.hasPermission(perm) || userStore.hasButton(perm))
}
return {
hasAuth,
hasAllAuth
}
}