54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
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
|
||
}
|
||
}
|