import type { RouteLocationNormalized, RouteRecordRaw } from 'vue-router'; import { useUserStore } from '@/store'; export default function usePermission() { const userStore = useUserStore(); return { accessRouter(route: RouteLocationNormalized | RouteRecordRaw) { return ( !route.meta?.requiresAuth || userStore.role === 'root' || (!route.meta?.menuCode && !route.meta?.roles) || Boolean( route.meta?.menuCode && userStore.menuCodes.includes(route.meta.menuCode), ) || Boolean(route.meta?.roles?.includes(userStore.role)) ); }, findFirstPermissionRoute(_routers: any, role = userStore.role) { const cloneRouters = [..._routers]; while (cloneRouters.length) { const firstElement = cloneRouters.shift(); if ( role === 'root' || (firstElement?.meta?.menuCode && userStore.menuCodes.includes(firstElement.meta.menuCode)) || firstElement?.meta?.roles?.includes(role) ) return { name: firstElement.name }; if (firstElement?.children) { cloneRouters.push(...firstElement.children); } } return null; }, // You can add any rules you want }; }