Saltar para o conteúdo

Registo de horas numa auditora

Registo de horas de projetos e equipa para uma auditora · Construído de raiz, a solo

Atualizado

Antes

Clientes, projetos e horas estavam num único sítio onde todos na firma podiam ver e alterar tudo.

Depois

87

caixas de permissões comprovadas na base de dados antes de cada deploy; as 30 que não faziam nada foram ocultadas.

Como funciona
  1. 1Pessoa:Proprietário

    Cria perfis com caixas de seleção por área (clientes, projetos, horas, relatórios) para ver, criar, editar e eliminar.

  2. 2Pessoa:Colaborador

    Regista horas num cliente, projeto e tarefa, ou marca férias e ausências.

    Sistema:Aplicação web

    Avisa quem ainda tem a folha de horas vazia antes do prazo.

  3. 3Pessoa:Administrador de projeto

    Aprova ou rejeita a folha de horas da semana da sua própria equipa de projeto.

  4. 4Sistema:Base de dados

    Mostra a cada pessoa apenas o que o seu perfil permite: a equipa vê as suas próprias horas, os administradores de projeto a sua equipa, os proprietários todos os clientes.

  5. 5Pessoa:Proprietário

    Consulta as horas por cliente, projeto e pessoa nos dashboards e relatórios.

Sempre garantido

  • Antes, todos na firma podiam abrir todos os clientes e as horas de todos. Agora a base de dados recusa tudo o que um perfil não permite, mesmo que um ecrã o peça.
  • Antes de cada push, cada perfil é testado numa cópia isolada da base de dados.

Problema

Uma auditora geria os clientes, os projetos e as horas da equipa numa ferramenta em que qualquer pessoa podia abrir todos os clientes e o tempo de todos.

Diagnóstico

O controlo de acessos falha em silêncio quando vive no ecrã, pelo que cada regra tinha de viver na base de dados, comprovada por testes.

Opções que ponderei

  1. Cada perfil vê dados diferentes. Onde vivem as regras de acesso?

    Escolhida

    Na própria base de dados, testadas para cada perfil antes de cada deploy

    O ecrã não pode expor o que a base de dados recusa. Custo: uma execução de testes numa cópia isolada antes de cada push.

    • Rejeitada

      Apenas nos ecrãs

      Uma pessoa podia ver ou alterar dados que o ecrã pretendia esconder.

  2. Um registo deixou de ser necessário. Apagar ou manter?

    Escolhida

    Arquivá-lo e anonimizá-lo

    O histórico das folhas de horas mantém-se intacto.

    • Rejeitada

      Apagá-los

      Apagar elimina em cascata o histórico das folhas de horas.

Solução

Uma aplicação web de página única sobre Postgres gerido. Cada regra de acesso vive na base de dados e é comprovada por uma matriz automática de perfis antes de cada deploy.

Aplicação
  • React
  • Vite
  • TanStack Router
  • TanStack Query
  • shadcn/ui
  • Chart.js
Dados e segurança
  • Supabase
  • PostgreSQL row-level security
  • Edge Functions (Deno)
Alojamento
  • Cloudflare
Qualidade
  • GitHub Actions
  • Role-matrix tests
  • Vitest
  • Property-based tests
  • Accessibility tests

Números: Verificação automática de perfis, 2026-09-25