halo/console/console-src/router/guards/auth-check.ts

59 lines
1.4 KiB
TypeScript

import { rbacAnnotations } from "@/constants/annotations";
import { useUserStore } from "@/stores/user";
import type { Router } from "vue-router";
const whiteList = ["Setup", "Login", "Binding"];
export function setupAuthCheckGuard(router: Router) {
router.beforeEach((to, from, next) => {
const userStore = useUserStore();
if (userStore.isAnonymous) {
if (whiteList.includes(to.name as string)) {
next();
return;
}
next({
name: "Login",
query: {
redirect_uri: encodeURIComponent(window.location.href),
},
});
return;
} else {
if (to.name === "Login") {
if (to.query.redirect_uri) {
next({
name: "Redirect",
query: {
redirect_uri: to.query.redirect_uri,
},
});
return;
}
const roleHasRedirectOnLogin = userStore.currentRoles?.find(
(role) =>
role.metadata.annotations?.[rbacAnnotations.REDIRECT_ON_LOGIN]
);
if (roleHasRedirectOnLogin) {
window.location.href =
roleHasRedirectOnLogin.metadata.annotations?.[
rbacAnnotations.REDIRECT_ON_LOGIN
] || "/";
return;
}
next({
name: "Dashboard",
});
return;
}
}
next();
});
}