Files
ACVE/lib/auth/requireTeacher.ts
2026-03-15 13:52:11 +00:00

45 lines
1.0 KiB
TypeScript
Executable File

import { db } from "@/lib/prisma";
import { UserRole } from "@prisma/client";
import { logger } from "@/lib/logger";
import { supabaseServer } from "@/lib/supabase/server";
export async function requireTeacher() {
const supabase = await supabaseServer();
if (!supabase) {
return null;
}
const {
data: { user },
} = await supabase.auth.getUser();
if (!user) {
return null; // Let the caller handle the redirect
}
const profile = await db.profile.findUnique({
where: { id: user.id },
}).catch((error) => {
logger.error("Failed to load profile in requireTeacher", {
userId: user.id,
email: user.email,
error: error instanceof Error ? error.message : "unknown",
});
return null;
});
if (
!profile ||
(profile.role !== UserRole.TEACHER && profile.role !== UserRole.SUPER_ADMIN)
) {
logger.info("User authenticated but not authorized as teacher", {
userId: user.id,
email: user.email,
role: profile?.role ?? "none",
});
return null;
}
return profile;
}