23 lines
692 B
TypeScript
23 lines
692 B
TypeScript
const allowedRoles: Record<string, true> = { shop_owner: true, shop_staff: true };
|
|
|
|
function hasAllowedRole(value: unknown): boolean {
|
|
if (!value || typeof value !== "object" || !("role" in value)) return false;
|
|
const role = value.role;
|
|
return typeof role === "string" && allowedRoles[role] === true;
|
|
}
|
|
|
|
export default defineNuxtRouteMiddleware(() => {
|
|
if (import.meta.server) return;
|
|
|
|
const token = localStorage.getItem("vmall.token");
|
|
const rawUser = localStorage.getItem("vmall.user");
|
|
let user: unknown = null;
|
|
try {
|
|
user = rawUser ? JSON.parse(rawUser) : null;
|
|
} catch {
|
|
user = null;
|
|
}
|
|
|
|
if (!token || !hasAllowedRole(user)) return navigateTo("/login");
|
|
});
|