Uttara

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.

Estado atual
Nenhum usuário autenticado.

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/authts
// @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;
}
tsx
// 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.