diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 2721c42..f9577b0 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -48,6 +48,7 @@ export default function Header() { const [searchFocused, setSearchFocused] = useState(false); const [currentUserId, setCurrentUserId] = useState(null); const [currentUserEmail, setCurrentUserEmail] = useState(null); + const [isAdmin, setIsAdmin] = useState(false); const [subEmail, setSubEmail] = useState(""); const [subStatus, setSubStatus] = useState<"idle" | "loading" | "success" | "error">("idle"); const [subMessage, setSubMessage] = useState(""); @@ -65,14 +66,28 @@ export default function Header() { useEffect(() => { const supabase = createClient(); + + const ADMIN_ROLES = new Set(["administrator", "admin", "super_admin"]); + + const refreshAdmin = async (userId: string | null) => { + if (!userId) { setIsAdmin(false); return; } + const { data } = await supabase + .from("user_profiles") + .select("role") + .eq("id", userId) + .maybeSingle(); + setIsAdmin(!!data?.role && ADMIN_ROLES.has(data.role)); + }; + supabase.auth.getUser().then(({ data: { user } }) => { setCurrentUserId(user?.id || null); setCurrentUserEmail(user?.email || null); + refreshAdmin(user?.id || null); }); - const supabase2 = createClient(); - const { data: { subscription } } = supabase2.auth.onAuthStateChange((_event, session) => { + const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => { setCurrentUserId(session?.user?.id || null); setCurrentUserEmail(session?.user?.email || null); + refreshAdmin(session?.user?.id || null); }); return () => subscription.unsubscribe(); }, []); @@ -237,48 +252,52 @@ export default function Header() { My Profile )} - - WP Import - - - Articles - - - Editorial - - - Users - - - Analytics - - - Audit Log - - - Notifications - - - Newsletter - - - Forum Seed - - - Company Tracker - - - Show Calendar - - - AI Console - - - Banned Terms - - - Dashboard - + {isAdmin && ( + <> + + WP Import + + + Articles + + + Editorial + + + Users + + + Analytics + + + Audit Log + + + Notifications + + + Newsletter + + + Forum Seed + + + Company Tracker + + + Show Calendar + + + AI Console + + + Banned Terms + + + Dashboard + + + )} {/* Inline Email Subscription Form */} {subStatus === "success" ? ( {subMessage} @@ -448,15 +467,17 @@ export default function Header() { Account {/* WP Import mobile link */} - setMobileOpen(false)}> - - WP Import - + {isAdmin && ( + setMobileOpen(false)}> + + WP Import + + )}
{categoryLinks?.map((link) => (