Grupos hierárquicos de 6 níveis — o recurso mais complexo do projeto
Existem recursos que parecem simples no papel. "Adicionar grupos" — parece inocente. Então você começa a investigar e percebe que acabou de abrir a caixa de Pandora.
TAMSIV suporta grupos hierárquicos com até 6 níveis de profundidade. Meu clube de mergulho, por exemplo: Clube → Comissão Técnica → Nível 1 → Grupo de terça-feira.
O modelo de dados
Cada grupo tem um parent_id que aponta para seu grupo pai. Para exibir a árvore completa, uso consultas recursivas (CTE) em PostgreSQL com uma cláusula WHERE depth < 6 como salvaguarda.
Quatro funções, quatro realidades
- Admin — fazer tudo: criar, modificar, excluir, gerenciar membros
- Manager — gerenciar tarefas e memorandos, atribuir membros
- Member — criar conteúdo, ver todo o conteúdo do grupo
- Viewer — somente leitura
A armadilha é a herança. Se você é admin de um grupo pai, é automaticamente admin dos subgrupos? No TAMSIV, a resposta é sim — mas com nuances.
31 políticas RLS
Este é o número de políticas de Row Level Security que tive que escrever para o esquema colaborativo. Testar 31 políticas são 31 cenários mínimos. Metódico, chato, indispensável.
O componente HierarchicalGroupPicker
No frontend, construí um HierarchicalGroupPicker que exibe a árvore com indentação, ícones de função e um alternador "incluir subgrupos". Este é o recurso que me levou mais tempo. Mas também é o que torna o TAMSIV utilizável para organizações reais.