permission.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router';
  2. import { computed } from 'vue';
  3. import { useUserStore } from '@/store';
  4. export default function usePermission() {
  5. const userStore = useUserStore();
  6. const role = userStore.getRole;
  7. return {
  8. accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
  9. return (
  10. !route.meta?.requiresAuth ||
  11. !route.meta?.roles ||
  12. route.meta?.roles?.includes('*') ||
  13. role === 'admin' ||
  14. route.meta?.roles?.includes(role)
  15. );
  16. },
  17. findFirstPermissionRoute(_routers: any, role = 'admin') {
  18. const cloneRouters = [..._routers];
  19. while (cloneRouters.length) {
  20. const firstElement = cloneRouters.shift();
  21. if (
  22. firstElement?.meta?.roles?.find((el: string[]) => {
  23. return el.includes('*') || el.includes(role);
  24. })
  25. )
  26. return { name: firstElement.name };
  27. if (firstElement?.children) {
  28. cloneRouters.push(...firstElement.children);
  29. }
  30. }
  31. return null;
  32. },
  33. // You can add any rules you want
  34. };
  35. }