use-access.ts 1.4 KB

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