Files
vmall/apps/shop-admin/middleware/auth.ts
T

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");
});