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.
- 1Pessoa:Proprietário
Cria perfis com caixas de seleção por área (clientes, projetos, horas, relatórios) para ver, criar, editar e eliminar.
- 2Pessoa:Colaborador
Regista horas num cliente, projeto e tarefa, ou marca férias e ausências.
Sistema:Aplicação webAvisa quem ainda tem a folha de horas vazia antes do prazo.
- 3Pessoa:Administrador de projeto
Aprova ou rejeita a folha de horas da semana da sua própria equipa de projeto.
- 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.
- 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
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.
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
Serviços relacionados
Números: Verificação automática de perfis, 2026-09-25