tapi/z_ele/src/utils/use-permission.ts
u2nyakim 78cbfb21d5 up.
2025-08-22 10:46:24 +08:00

89 lines
2.2 KiB
TypeScript

import { storeToRefs } from 'pinia';
import { useUserStore } from '@/store/modules/user';
/**
* 权限判断hook
*/
export function usePermission() {
const userStore = useUserStore();
const { authorities, roles } = storeToRefs(userStore);
/**
* 是否有某些权限
* @param value 权限字符或字符数组
*/
const hasPermission = (value: string | string[]): boolean => {
// 如果需要某个特殊标识代表全部权限可添加如下
/* if (authorities.value && authorities.value.includes('*:*:*')) {
return true;
} */
return arrayHas(authorities.value, value);
};
/**
* 是否有任意权限
* @param value 权限字符或字符数组
*/
const hasAnyPermission = (value: string | string[]): boolean => {
// 如果需要某个特殊标识代表全部权限可添加如下
/* if (authorities.value && authorities.value.includes('*:*:*')) {
return true;
} */
return arrayHasAny(authorities.value, value);
};
/**
* 是否有某些角色
* @param value 角色字符或字符数组
*/
const hasRole = (value: string | string[]): boolean => {
return arrayHas(roles.value, value);
};
/**
* 是否有任意角色
* @param value 角色字符或字符数组
*/
const hasAnyRole = (value: string | string[]): boolean => {
return arrayHasAny(roles.value, value);
};
return { hasPermission, hasAnyPermission, hasRole, hasAnyRole };
}
/**
* 判断数组是否有某些值
* @param array 数组
* @param value 单个值或数组
*/
function arrayHas(array: (string | undefined)[], value: string | string[]) {
if (!value) {
return true;
}
if (!array) {
return false;
}
if (Array.isArray(value)) {
return value.every((v) => array.includes(v));
}
return array.includes(value);
}
/**
* 判断数组是否有任意值
* @param array 数组
* @param value 单个值或数组
*/
function arrayHasAny(array: (string | undefined)[], value: string | string[]) {
if (!value) {
return true;
}
if (!array) {
return false;
}
if (Array.isArray(value)) {
return array.some((d) => d && value.includes(d));
}
return array.includes(value);
}