2023-07-24 10:05:07 +08:00
|
|
|
import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router';
|
|
|
|
|
import { useUserStore } from '@/store';
|
|
|
|
|
|
|
|
|
|
export default function usePermission() {
|
|
|
|
|
const userStore = useUserStore();
|
|
|
|
|
return {
|
2023-07-27 18:48:15 +08:00
|
|
|
// TODO test
|
2023-07-24 10:05:07 +08:00
|
|
|
accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
|
|
|
|
|
return (
|
|
|
|
|
!route.meta?.requiresAuth ||
|
2023-07-27 18:48:15 +08:00
|
|
|
!route.meta?.permission ||
|
|
|
|
|
userStore.permission?.includes(route.meta?.permission)
|
2023-07-24 10:05:07 +08:00
|
|
|
);
|
|
|
|
|
},
|
2023-07-27 18:48:15 +08:00
|
|
|
findFirstPermissionRoute(_routers: any, permission: string) {
|
2023-07-24 10:05:07 +08:00
|
|
|
const cloneRouters = [..._routers];
|
|
|
|
|
while (cloneRouters.length) {
|
|
|
|
|
const firstElement = cloneRouters.shift();
|
2023-07-27 18:48:15 +08:00
|
|
|
if (firstElement?.meta?.permission === permission) {
|
2023-07-24 10:05:07 +08:00
|
|
|
return { name: firstElement.name };
|
2023-07-27 18:48:15 +08:00
|
|
|
}
|
2023-07-24 10:05:07 +08:00
|
|
|
if (firstElement?.children) {
|
|
|
|
|
cloneRouters.push(...firstElement.children);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
}
|