admin-vben5/packages/effects/access/src/use-access.ts

60 lines
1.6 KiB
TypeScript
Raw Normal View History

import { computed } from 'vue';
import { preferences, updatePreferences } from '@vben/preferences';
2024-07-30 21:10:28 +08:00
import { useAccessStore, useUserStore } from '@vben/stores';
function useAccess() {
2024-07-30 21:10:28 +08:00
const accessStore = useAccessStore();
const userStore = useUserStore();
const accessMode = computed(() => {
return preferences.app.accessMode;
});
/**
*
* @description: Determine whether there is permissionThe role is judged by the user's role
* @param roles
*/
2024-07-18 21:31:34 +08:00
function hasAccessByRoles(roles: string[]) {
2024-07-30 21:10:28 +08:00
const userRoleSet = new Set(userStore.userRoles);
const intersection = roles.filter((item) => userRoleSet.has(item));
return intersection.length > 0;
}
/**
*
* @description: Determine whether there is permissionThe permission code is judged by the user's permission code
* @param codes
*/
2024-07-18 21:31:34 +08:00
function hasAccessByCodes(codes: string[]) {
2024-07-30 21:10:28 +08:00
const userCodesSet = new Set(accessStore.accessCodes);
2024-08-07 08:57:56 +08:00
/**
*
*/
if (userCodesSet.has('*:*:*')) {
return true;
}
// 其他 判断是否存在
const intersection = codes.filter((item) => userCodesSet.has(item));
return intersection.length > 0;
}
async function toggleAccessMode() {
updatePreferences({
app: {
accessMode:
preferences.app.accessMode === 'frontend' ? 'backend' : 'frontend',
},
});
}
return {
accessMode,
2024-07-18 21:31:34 +08:00
hasAccessByCodes,
hasAccessByRoles,
toggleAccessMode,
};
}
export { useAccess };