feat: protect production Snipe-IT operations
This commit is contained in:
@@ -74,6 +74,8 @@ docker compose restart queue scheduler
|
||||
|
||||
## Integração Snipe-IT
|
||||
|
||||
> **Instância de produção:** é proibido criar, editar ou eliminar produtos, ativos ou quaisquer dados mestres. Diagnósticos e testes técnicos fazem apenas pedidos `GET`. Checkout e check-in só podem ocorrer como movimentos operacionais legítimos iniciados por um operador no portal. Um ativo que já esteja atribuído não pode ser usado para testar ou repetir um checkout.
|
||||
|
||||
Definir no ambiente, sem colocar tokens no repositório:
|
||||
|
||||
```dotenv
|
||||
@@ -88,6 +90,8 @@ SNIPE_IT_RETRY_DELAY_MS=250
|
||||
|
||||
O token de leitura deve pertencer a uma conta técnica com acesso apenas de leitura aos ativos. O token operacional deve ser separado e ter apenas as permissões necessárias para checkout/check-in. A aplicação acrescenta `/api/v1` automaticamente quando a URL não o contém.
|
||||
|
||||
Nunca validar o token operacional através de um checkout/check-in artificial. A validade de leitura pode ser confirmada pelo teste de ligação administrativo ou por uma sincronização. A permissão operacional é confirmada apenas no primeiro movimento institucional legítimo, sobre um ativo existente, atualmente não atribuído e previamente reservado no portal.
|
||||
|
||||
Operações:
|
||||
|
||||
```bash
|
||||
@@ -103,6 +107,8 @@ docker compose exec app php artisan schedule:list
|
||||
|
||||
Administradores podem testar a ligação, iniciar uma execução e consultar as últimas dez sincronizações em `http://localhost:8000/administracao/snipe-it`. Uma execução falhada mantém o último catálogo válido e não desativa registos ausentes. Consultar `sync_runs`, os logs do worker e o painel antes de repetir.
|
||||
|
||||
O teste de ligação e `snipe:sync-assets` consultam a API e alteram apenas o cache local do portal. Não executar comandos improvisados com `POST`, `PUT`, `PATCH` ou `DELETE` contra a URL configurada. Nunca copiar para terminais partilhados, tickets ou documentação os tokens, a URL privada ou corpos integrais devolvidos pela API.
|
||||
|
||||
## Microsoft Entra ID
|
||||
|
||||
Registar uma aplicação **single tenant** do tipo Web. O redirect URI tem de corresponder exatamente ao domínio do portal e ao caminho `/auth/microsoft/callback`. Em produção é obrigatório HTTPS.
|
||||
@@ -139,6 +145,8 @@ Procedimento de entrega:
|
||||
4. registar a entrega e verificar a mensagem de sucesso;
|
||||
5. se existir erro, não voltar a submeter antes de consultar o estado do ativo no Snipe-IT.
|
||||
|
||||
Antes do `POST` de checkout, o portal consulta o estado remoto atual. Se o ativo já estiver atribuído — ao destinatário esperado ou a qualquer outro — a entrega é bloqueada sem escrita no Snipe-IT. Não contornar este bloqueio nem alterar o ativo diretamente para prosseguir.
|
||||
|
||||
Procedimento de devolução:
|
||||
|
||||
1. localizar a requisição ou ler a etiqueta;
|
||||
@@ -147,6 +155,8 @@ Procedimento de devolução:
|
||||
4. criar um incidente e bloqueio temporal quando o ativo não deva voltar ao catálogo;
|
||||
5. concluir o processo apenas depois de todos os itens estarem devolvidos.
|
||||
|
||||
O check-in só é enviado se existir um checkout confirmado pelo portal para esse item e requisitante, e se a atribuição atual no Snipe-IT corresponder ao mesmo utilizador. Se alguma destas provas falhar, não efetuar o check-in manualmente a partir do portal; reconciliar o histórico com o responsável do inventário.
|
||||
|
||||
Uma operação parcial fica em `incident`. Consultar `handover_records` para movimentos confirmados e os eventos `reservation.delivery_failed`/`reservation.return_failed` em `audit_logs`. Comparar cada item com o estado atual no Snipe-IT; corrigir apenas os itens ainda `ready` ou `delivered`. Não alterar estados diretamente na base de dados nem repetir em bloco, porque as escritas externas são deliberadamente não idempotentes e não têm retry automático.
|
||||
|
||||
## Ciclo de vida das pré-reservas
|
||||
|
||||
Reference in New Issue
Block a user