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
text/typescript
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,
};
};