Uttara UI · Autenticação
Autenticação
O Uttara UI não embute nenhum SDK de autenticação: exige apenas o contrato AuthAdapter. O encaixe canônico é o @uttara-dev/cas-client, que traz duas facilidades que a UI já sabe apresentar: o Preview Mode (sessão local válida em dev, iframe e smoke tests) e o god mode (operar o ecossistema como outro usuário). O fluxo OIDC em si está em /integracao.
Sessão ao vivo desta vitrine
Esta página consome o mesmo useAuth() de uma app real. O AppProviders carrega createCasServerAuthAdapter com Preview Mode ligado quando não há VITE_CAS_ISSUER — a sessão é emitida pelo backend e é indistinguível de uma real.
Observe o UserMenu na sidebar reagir em tempo real — mesmo adapter, mesmo provider.
1. O contrato AuthAdapter
Tudo que o pacote precisa saber sobre o usuário cabe nesta interface. UserMenu, AppShell e qualquer item de navegação com requiredPermission consultam o adapter via useAuth().
// @uttara-dev/ui/auth — contrato que sua app implementa
export interface AuthUser {
id: string;
name: string;
email: string;
avatarUrl?: string;
permissions?: string[];
}
export interface AuthAdapter {
getUser(): AuthUser | null;
isLoading(): boolean;
hasPermission(permission: string): boolean;
signIn(): Promise<void> | void;
signOut(): Promise<void> | void;
subscribe(listener: () => void): () => void;
}// Consumindo o usuário em qualquer componente
import { useAuth } from "@uttara-dev/ui/auth";
export function BotaoExcluir({ id }: { id: string }) {
const { user, hasPermission } = useAuth();
if (!hasPermission("clientes.delete")) return null;
return (
<Button onClick={() => excluir(id, user!.id)} variant="destructive">
Excluir
</Button>
);
}Conteúdo restrito
As seções sobre Preview Mode, god mode e os pontos delicados de implementação aparecem para usuários autenticados. Entre com um perfil (botão acima ou pelo menu de usuário na sidebar) para ver — é a própria demonstração do gate de sessão desta vitrine.