ff-admin/src/router/adminGuard.ts

49 lines
1.4 KiB
TypeScript

import NProgress from "nprogress";
import { useAbilityStore } from "@/stores/ability";
import { useNavigationStore } from "@/stores/admin/navigation";
export async function abilityAndNavUpdate(to: any, from: any, next: any) {
NProgress.start();
const ability = useAbilityStore();
const navigation = useNavigationStore();
let admin = to.meta.admin || false;
let type = to.meta.type;
let section = to.meta.section;
let module = to.meta.module;
if (to.name == "admin-default") {
navigation.activeNavigation = "club";
navigation.activeLink = null;
navigation.updateTopLevel();
navigation.updateNavigation();
NProgress.done();
next();
} else if (module && ((admin && ability.isAdmin()) || ability.can(type, section, module))) {
NProgress.done();
navigation.activeNavigation = to.name.split("-")[1];
navigation.activeLink = to.name.split("-")[2];
next();
} else if (!module && ((admin && ability.isAdmin()) || ability.canSection(type, section))) {
NProgress.done();
navigation.activeNavigation = to.name.split("-")[1];
navigation.activeLink = null;
next();
} else {
NProgress.done();
next({ name: "admin-default" });
}
}
export async function isOwner(to: any, from: any, next: any) {
NProgress.start();
const ability = useAbilityStore();
if (ability.isOwner) {
NProgress.done();
next();
} else {
NProgress.done();
next(false);
}
}