iot-gateway_fontend/src/hooks/permission.ts
2024-12-26 11:31:25 +08:00

39 lines
1.2 KiB
TypeScript

import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router';
import { useUserStore } from '@/store';
import { intersection } from 'lodash';
export default function usePermission() {
const userStore = useUserStore();
return {
accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
return (
!route.meta?.requiresAuth ||
!route.meta?.permissions ||
route.meta?.permissions?.includes('*') ||
intersection(route.meta?.permissions, userStore.permissions).length >
0 ||
route.meta?.permissions?.some((item) =>
userStore?.permissions?.includes(item)
)
);
},
findFirstPermissionRoute(_routers: any, permissions: string[]) {
const cloneRouters = [..._routers];
while (cloneRouters.length) {
const firstElement = cloneRouters.shift();
if (
firstElement?.meta?.roles?.find((el: string[]) => {
return el.includes('*') || el.some((item) => permissions?.includes(item))
})
)
return { name: firstElement.name };
if (firstElement?.children) {
cloneRouters.push(...firstElement.children);
}
}
return null;
},
// You can add any rules you want
};
}