use-access.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { computed } from 'vue';
  2. import { preferences, updatePreferences } from '@vben-core/preferences';
  3. import { useCoreAccessStore } from '@vben-core/stores';
  4. function useAccess() {
  5. const coreAccessStore = useCoreAccessStore();
  6. const accessMode = computed(() => {
  7. return preferences.app.accessMode;
  8. });
  9. /**
  10. * 基于角色判断是否有权限
  11. * @description: Determine whether there is permission,The role is judged by the user's role
  12. * @param roles
  13. */
  14. function hasAccessByRoles(roles: string[]) {
  15. const userRoleSet = new Set(coreAccessStore.userRoles);
  16. const intersection = roles.filter((item) => userRoleSet.has(item));
  17. return intersection.length > 0;
  18. }
  19. /**
  20. * 基于权限码判断是否有权限
  21. * @description: Determine whether there is permission,The permission code is judged by the user's permission code
  22. * @param codes
  23. */
  24. function hasAccessByCodes(codes: string[]) {
  25. const userCodesSet = new Set(coreAccessStore.accessCodes);
  26. const intersection = codes.filter((item) => userCodesSet.has(item));
  27. return intersection.length > 0;
  28. }
  29. async function toggleAccessMode() {
  30. updatePreferences({
  31. app: {
  32. accessMode:
  33. preferences.app.accessMode === 'frontend' ? 'backend' : 'frontend',
  34. },
  35. });
  36. }
  37. return {
  38. accessMode,
  39. hasAccessByCodes,
  40. hasAccessByRoles,
  41. toggleAccessMode,
  42. };
  43. }
  44. export { useAccess };