| | |
| | | import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router'; |
| | | import { useUserStore } from '@/store'; |
| | | import { RouteLocationNormalized, RouteRecordRaw } from "vue-router"; |
| | | import { useUserStore } from "@/store"; |
| | | import { getUserInfo, getUserResources } from "@/utils/auth"; |
| | | |
| | | export default function usePermission() { |
| | | const userStore = useUserStore(); |
| | | return { |
| | | accessRouter(route: RouteLocationNormalized | RouteRecordRaw) { |
| | | return ( |
| | | !route.meta?.requiresAuth || |
| | | !route.meta?.roles || |
| | | route.meta?.roles?.includes('*') || |
| | | route.meta?.roles?.includes(userStore.role) |
| | | ); |
| | | //遍历userStore.resource |
| | | let isok = false; |
| | | let user = getUserResources(); |
| | | let resurces: any; |
| | | if (userStore.resources) { |
| | | resurces = userStore.resources; |
| | | } else { |
| | | if (user) { |
| | | resurces = JSON.parse(user); |
| | | } |
| | | } |
| | | if (resurces) { |
| | | resurces.forEach(r => { |
| | | if ((r.menuType == 0 || r.menuType == 3) && (route.name == r.component || route.path == r.component)) { |
| | | isok = true; |
| | | } |
| | | }); |
| | | return isok; |
| | | } else { |
| | | return ( |
| | | !route.meta?.requiresAuth || |
| | | !route.meta?.roles || |
| | | route.meta?.roles?.includes("*") || |
| | | route.meta?.roles?.includes(userStore.role) |
| | | ); |
| | | } |
| | | |
| | | }, |
| | | findFirstPermissionRoute(_routers: any, role = 'admin') { |
| | | findFirstPermissionRoute(_routers: any, role = "admin") { |
| | | const cloneRouters = [..._routers]; |
| | | while (cloneRouters.length) { |
| | | const firstElement = cloneRouters.shift(); |
| | | if ( |
| | | firstElement?.meta?.roles?.find((el: string[]) => { |
| | | return el.includes('*') || el.includes(role); |
| | | return el.includes("*") || el.includes(role); |
| | | }) |
| | | ) |
| | | return { name: firstElement.name }; |
| | |
| | | } |
| | | } |
| | | return null; |
| | | }, |
| | | } |
| | | // You can add any rules you want |
| | | }; |
| | | } |