UNPKG

codalware-auth

Version:

Complete authentication system with enterprise security, attack protection, team workspaces, waitlist, billing, UI components, 2FA, and account recovery - production-ready in 5 minutes. Enhanced CLI with verification, rollback, and App Router scaffolding.

61 lines (52 loc) 1.73 kB
import { useEffect } from 'react'; import { useSession } from '../lib/auth/providers/hooks'; import { navigate } from '../utils/navigation'; interface AuthUser { id: string; email: string; name?: string; role: string; tenantId?: string; status: string; } export const useAuth = (requireAuth: boolean = false) => { const { data: session, status } = useSession(); const user: AuthUser | null = session?.user && session.user.id && session.user.email && session.user.role && session.user.status ? { id: session.user.id as string, email: session.user.email as string, name: session.user.name || undefined, role: session.user.role as string, tenantId: (session.user.tenantId as string | undefined) ?? undefined, status: session.user.status as string, } : null; const isLoading = status === 'loading'; const isAuthenticated = status === 'authenticated'; useEffect(() => { if (requireAuth && !isLoading && !isAuthenticated) { navigate('/auth/login'); } }, [requireAuth, isLoading, isAuthenticated]); const hasRole = (roles: string | string[]): boolean => { if (!user) return false; const roleArray = Array.isArray(roles) ? roles : [roles]; return roleArray.includes(user.role); }; const isSuperAdmin = (): boolean => hasRole('SUPER_ADMIN'); const isTenantAdmin = (): boolean => hasRole(['SUPER_ADMIN', 'TENANT_ADMIN']); const isUser = (): boolean => hasRole(['SUPER_ADMIN', 'TENANT_ADMIN', 'USER']); return { user, isLoading, isAuthenticated, hasRole, isSuperAdmin, isTenantAdmin, isUser, }; };