Files
platforms/frontend/platform_admin/src/hooks/permission.ts

39 lines
1.2 KiB
TypeScript
Raw Normal View History

2026-07-27 00:18:42 +08:00
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 ||
2026-07-27 12:48:35 +08:00
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))
2026-07-27 00:18:42 +08:00
);
},
2026-07-27 12:48:35 +08:00
findFirstPermissionRoute(_routers: any, role = userStore.role) {
2026-07-27 00:18:42 +08:00
const cloneRouters = [..._routers];
while (cloneRouters.length) {
const firstElement = cloneRouters.shift();
if (
2026-07-27 12:48:35 +08:00
role === 'root' ||
(firstElement?.meta?.menuCode &&
userStore.menuCodes.includes(firstElement.meta.menuCode)) ||
firstElement?.meta?.roles?.includes(role)
2026-07-27 00:18:42 +08:00
)
return { name: firstElement.name };
if (firstElement?.children) {
cloneRouters.push(...firstElement.children);
}
}
return null;
},
// You can add any rules you want
};
}