38 lines
1.3 KiB
TypeScript
38 lines
1.3 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?.includes(userStore.permissions)
|
||
|
);
|
||
|
},
|
||
|
// TODO 不知道是干嘛的
|
||
|
// findFirstPermissionRoute(_routers: any, role: string | string[] = '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 { name: firstElement.name };
|
||
|
// if (firstElement?.children) {
|
||
|
// cloneRouters.push(...firstElement.children);
|
||
|
// }
|
||
|
// }
|
||
|
// return null;
|
||
|
// },
|
||
|
// You can add any rules you want
|
||
|
};
|
||
|
}
|