Usuário padrão

Todo projeto novo já nasce pronto para autenticação. A menos que você passe --no-user, o gize new gera um recurso users completo — model, migration e rotas protegidas — já registrado em src/app/mod.rs e gize.toml.

Nasce junto com o app

O gize new shop gera a mesma fatia em camadas que o gize make crud produz (model, dto, repository, service, handler, routes, error, tests), mais a migration da tabela users. Depois do gize migrate você tem um recurso de identidade funcional e pronto para auth sem escrever uma linha de código.

As senhas são hasheadas com Argon2id antes de serem armazenadas e nunca são serializadas de volta nas respostas da API. Os endpoints register e login emitem um JWT stateless (HS256) assinado com GIZE_JWT_SECRET, e uma claim is_admin viaja no token para que as rotas de admin não precisem de consulta extra ao banco.

É um recurso, não um framework escondido: cada arquivo é Rust comum e seu, que você pode ler, versionar e estender. Passe gize new shop --no-user para pular tudo isso.

O model User

A tabela users é criada com uma restrição UNIQUE em email e is_admin com padrão false. O model gerado mapeia para ela um-para-um:

idUuidChave primária, gerada pelo banco de dados.
nameStringO nome de exibição do usuário.
emailStringIdentificador de login; UNIQUE no nível do banco.
passwordStringHash Argon2id. Marcado com #[serde(skip_serializing)], então é lido do banco mas nunca retornado nas respostas.
is_adminboolFlag de papel, padrão false. Protege as rotas exclusivas de admin; um register público nunca consegue defini-la.
created_at / updated_atDateTimeTimestamps gerenciados pelo recurso.

Rotas que já nascem com ele

A fatia é protegida por padrão (ADR-013 / ADR-021): register e login são públicos, /users/me é self-service para qualquer chamador autenticado, e toda outra rota — incluindo leituras de usuários arbitrários — exige um token bearer de admin. Em um projeto versionado (gize new --api v1) elas ficam sob o prefixo /api/v1.

POST /users/registerPúblico

Cria um usuário (nunca admin) e devolve um token de sessão.

POST /users/loginPúblico

Troca email e senha por um token de sessão.

GET /users/meAutenticado

Retorna o registro do próprio chamador, identificado pela claim sub do token. Qualquer token válido funciona — sem exigir flag de admin.

GET /usersAdmin

Lista todos os usuários. Protegida por admin para que a API nunca vaze emails nem permita enumeração via leituras públicas.

POST /usersAdmin

Cria um usuário diretamente, incluindo admins. É assim que admins são criados.

GET /users/:idAdmin

Lê um usuário arbitrário por id.

PUT /users/:idAdmin

Atualiza um usuário arbitrário por id.

DELETE /users/:idAdmin

Remove um usuário arbitrário por id.

Níveis de acesso: Público não precisa de token; Autenticado precisa de qualquer token bearer válido; Admin precisa de um token cuja claim is_admin seja true. Crie o primeiro admin com gize createadmin.