Adicionando Features
Além do núcleo de APIs e frontends, projetos reais frequentemente exigem funcionalidades adicionais para garantir segurança, controle de acesso e execução de processos em segundo plano.
O Lino facilita a adição dessas capacidades de forma padronizada, refletindo tanto no backend (endpoints) quanto no frontend (aplicações Blazor).
Segurança e Autenticação
A autenticação é a base de qualquer sistema seguro. O Lino suporta autenticação baseada em JWT (JSON Web Tokens), utilizando o esquema Bearer nas APIs.
Fluxo de autenticação típico:
1. O usuário realiza login (via endpoint ou página dedicada).
2. Um JWT é emitido com claims representando identidade, roles e permissões.
3. Cada requisição à API inclui o token no header: Authorization: Bearer <token>
4. O middleware de autenticação valida o token, verificando assinatura e expiração.
Autorização baseada em Policies
O Lino utiliza Policies para implementar autorização granular:
- Cada ação pode exigir uma Policy específica (ex.: People.Read, People.Create).
- As policies são configuradas via AddAuthorization.
- Endpoints podem ser protegidos declarando:
.RequireAuthorization
Adicionando segurança a projetos Lino
Para adicionar segurança a um projeto, execute:
lino features auth add
O assistente interativo do CLI solicitará as seguintes configurações:
- Serviço – serviço no qual os recursos de segurança serão configurados.
- Módulo – módulo específico onde a segurança será instalada (aplicável apenas em serviços modulares).
- Lifetime Access Token – tempo de vida do token de acesso.
- Lifetime Refresh Token - tempo de vida do token de atualização.
- Tipo de identificador do usuário - define o tipo de dado utilizado como UserId (
int,longouGuid).
Essas definições garantem que o pipeline de autenticação/autorização seja configurado automaticamente, pronto para uso em APIs e integrado ao Blazor.
Background Jobs
Muitos sistemas necessitam executar processos assíncronos em segundo plano, como:
- Envio de emails
- Geração de relatórios
- Sincronização com sistemas externos.
O Lino oferece suporte nativo ao Hangfire como orquestrador de jobs.
Benefícios do Hangfire
- Execução confiável de jobs assíncronos.
- Painel de monitoramento embutido.
- Suporte a jobs recorrentes ou agendados.
- Persistência confiável de jobs no banco de dados.
Integração de Eventos com Outbox Message
Para garantir consistência em integrações assíncronas, o Lino adota o padrão Outbox Message.
Ao executar uma ação de negócio (ex.: criação de um pedido), o evento correspondente (OrderCreated) é salvo na tabela Outbox, na mesma transação que persiste o estado do domínio. Um processador em segundo plano lê a tabela Outbox e publica os eventos em sistemas de mensageria (RabbitMQ, Kafka, etc.).
Benefícios do Outbox:
- Atomicidade → banco de dados e eventos publicados permanecem sincronizados.
- Confiabilidade → nenhum evento é perdido, mesmo em caso de falha.
- Escalabilidade → múltiplos consumidores podem processar os eventos.
Esse modelo garante integrações seguras e resilientes em arquiteturas distribuídas.
Com esses recursos adicionais, o Lino oferece segurança robusta, controle granular de acesso e processamento assíncrono confiável, atendendo requisitos críticos de aplicações modernas em produção.
Adicionando recursos de Background Job a projetos Lino
O processamento assíncrono é essencial para tarefas que não devem bloquear o fluxo principal de requisições, como envio de notificações, geração de relatórios ou publicação de eventos.
O Lino permite habilitar suporte a Background Jobs (via bibliotecas) com um único comando:
lino features background-job add
O CLI solicitará os seguintes parâmetros de configuração:
- Serviço – serviço no qual o recurso de Background Job será adicionado.
- Biblioteca – biblioteca escolhida para execução e agendamento de jobs.
- Tempo de checagem e processamento - intervalo em que a fila será verificada para buscar novas mensagens Outbox.
- Quantidade de registros - número máximo de registros processados por ciclo, controlando paralelismo e consumo de recursos.
Essas opções permitem que o sistema seja configurado de forma escalável e resiliente, garantindo execução confiável de tarefas em segundo plano.
