Blog
Build in Public
30 de abril de 202610 min

3 níveis de acesso para compartilhar sem entregar tudo: a reformulação das permissões no TAMSIV

Marie convidou Camille para a pasta "Casamento Léa & Thomas" na terça-feira à noite. Ela só queria mostrar a lista de fornecedores e a organização dos convidados. Na quarta-feira ao meio-dia, Camille havia modificado o orçamento, excluído duas tarefas "por engano" e renomeado a pasta. Não por malícia. Apenas porque o compartilhamento era binário: ou você está dentro ou não está, e quando você está dentro, você pode fazer tudo.

Este cenário se repete constantemente à medida que um aplicativo colaborativo cresce. A granularidade de acesso não é um detalhe técnico, é o que diferencia uma ferramenta que pode ser emprestada a toda a família de uma ferramenta que hesitamos em compartilhar. A versão 1.29 do TAMSIV introduz três níveis de acesso distintos (leitura, escrita, total) que se aplicam a cada membro de um compartilhamento, em cada tarefa, memorando, evento e pasta. 1258 linhas adicionadas, 824 excluídas, seis idiomas atualizados, um projeto que internamente chamamos de "Fase A + B reformulação de permissões".

Pontos chave
  • Três níveis de acesso claros substituem o compartilhamento binário: Leitura (ver sem modificar), Escrita (ver e modificar o conteúdo), Total (modificar, excluir, gerenciar atribuições).
  • Cada membro de uma pasta compartilhada recebe um distintivo visível (olho cinza, lápis azul, escudo verde) que torna o acesso legível rapidamente para todos, não apenas para o proprietário.
  • As seções "Árvore" e "Membros" tornam-se recolhíveis, a árvore de acesso é redesenhada com conectores contínuos, cartões recuados por profundidade e uma linha horizontal estendida por nível.
  • O componente PermissionLevelPicker centraliza a seleção: 186 linhas, modal acessível, descrições explícitas em seis idiomas, estado desativado para funções não editáveis.
  • A função de um atribuído é resolvida no contexto da pasta (atribuído direto vs. externo), com chaves roles.assigned e roles.external que evitam confusões visuais.
Visualização cinemática de camadas concêntricas de chaves douradas e âmbar, representando os níveis de acesso graduais de um compartilhamento colaborativo

Por que o compartilhamento binário não funciona mais quando uma família se envolve?

Na maioria dos aplicativos colaborativos de consumo, o acesso se resume a dois estados: você é membro ou não é. Quando você convida alguém, você automaticamente concede a essa pessoa o direito de fazer tudo. Modificar, excluir, adicionar participantes, alterar datas, renomear. Este é o modelo do Trello para quadros básicos, da maioria das notas compartilhadas da Apple e de muitas listas de compras compartilhadas.

Este modelo funciona enquanto você compartilha com apenas uma pessoa de confiança, e enquanto todos têm o mesmo interesse em respeitar o conteúdo. Assim que você adiciona um terceiro ator, ou a dinâmica muda, o atrito começa. Seu cônjuge precisa modificar a lista de compras, mas sua sogra que está passando o fim de semana só precisa vê-la. Sua equipe pode editar o briefing do cliente, mas o próprio cliente deve apenas ler. Sua irmã que está preparando o casamento com você precisa de controle total, mas sua cunhada que ajuda ocasionalmente não precisa poder excluir a pasta inteira.

A ausência de níveis de acesso força uma escolha binária dolorosa: ou você superinveste os convidados (e corre o risco de um parente modificar sem querer), ou você subinveste (e a pessoa não pode fazer nada útil, então ela desiste). É exatamente o atrito que leva as pessoas a voltar para capturas de tela do WhatsApp e para a carga mental espalhada em dez ferramentas diferentes.

Quais são os três níveis de acesso no TAMSIV?

A reformulação introduz três níveis distintos, cada um com seu ícone, cor e descrição, acessíveis através de um seletor unificado em todo o aplicativo.

Leitura (olho cinza)

O membro vê todo o conteúdo, mas não pode modificar nada. Ele pode comentar, reagir com emojis, receber notificações da pasta, mas não pode criar novas tarefas, modificar datas ou alterar atribuições. Este é o nível perfeito para um parente que você mantém informado, um cliente que você consulta, um pai que quer acompanhar a organização sem o risco de tocar em nada.

Escrita (lápis azul)

O membro pode ver e modificar o conteúdo existente. Ele pode criar novas tarefas, modificar memorandos, adicionar fotos, mover um evento. Mas ele não pode excluir o que não criou, nem gerenciar as atribuições de outros. Este é o modo de colaboração comum, aquele que usamos quando trabalhamos juntos no mesmo projeto.

Total (escudo verde)

O membro tem os mesmos direitos que o proprietário, com uma exceção: ele não pode dissolver o compartilhamento inteiro. Ele pode modificar, excluir, gerenciar atribuições, convidar novos membros, alterar os níveis de acesso de outros. Este é o modo "co-organizador", perfeito para um cônjuge, um parceiro, um pai a quem você deseja delegar tudo sem transferir a propriedade da pasta.

Os três níveis são representados por um seletor visual consistente: ícone + cor + rótulo, com uma bolha de explicação ao tocar. O seletor é chamado PermissionLevelPicker, ele reside em frontend/src/components/common/ e é usado em todos os lugares onde um nível de acesso precisa ser exibido ou modificado. Essa unicidade do componente garante que um membro de Leitura na pasta "Casamento" se reconheça visualmente como Leitura na tarefa "Reservar salão", sem reinterpretação.

Como ver quem tem qual acesso em uma pasta compartilhada?

A segunda grande parte da reformulação diz respeito à tela que lista os membros. Antes, víamos uma lista plana de avatares com nomes. Agora, cada membro é acompanhado por um distintivo de acesso colorido, e a lista é classificada por nível (os Totais no topo, depois os de Escrita, depois os de Leitura). Em um relance, o proprietário vê quem pode fazer o quê.

As seções "Árvore" e "Membros" dos detalhes de uma tarefa, memorando ou evento agora se tornam recolhíveis. Tu tocas no cabeçalho, a seta gira, a seção se dobra ou se desdobra. Em telas com muitos membros ou hierarquias profundas, isso muda tudo para a legibilidade.

A própria árvore de acesso foi redesenhada. Antes, era uma lista plana com duas ou três indentações aproximadas. Agora, cada nível de profundidade tem sua própria célula, sua própria linha horizontal que se estende, seus próprios conectores de árvore contínuos que desenham a hierarquia como uma árvore real. Quando uma pasta está aninhada em outra, e uma tarefa está aninhada na pasta filha, a árvore torna a cadeia de herança visual, não verbal.

Como funciona a herança de permissões através da hierarquia?

TAMSIV permite aninhar pastas em seis níveis. Se tu deres acesso de Escrita a alguém em uma pasta pai, essa pessoa herda automaticamente o acesso de Escrita em todas as subpastas e seu conteúdo. Este é o comportamento padrão, e é o que se espera em 80% dos casos.

Mas a nova arquitetura também permite sobrepor um nível de acesso localmente. Um membro com acesso de Escrita na pasta pai pode ser limitado a Leitura em uma subpasta específica, porque essa subpasta contém informações sensíveis. A sobreposição é explícita (um distintivo específico aparece na árvore), e é exibida no contexto da pasta pai para permanecer rastreável.

Esta herança com sobreposição é tecnicamente complexa. Ela se baseia nas políticas de segurança em nível de linha do PostgreSQL, estendidas por 31 políticas RLS que calculam o nível efetivo de um usuário em um determinado item, subindo a árvore. O resultado é calculado no lado do banco de dados, não no lado do cliente, o que evita desvios de permissões e exploits no frontend.

Por que esta reformulação afetou 15 arquivos e 6 idiomas?

As permissões são um conceito transversal. Elas vivem nos detalhes de uma tarefa (quem pode modificar?), na lista de membros de uma pasta (quem vê o quê?), no seletor de compartilhamento (a quem eu dou acesso?), na tela de atribuição (quem pode ser atribuído?), na árvore de acesso (como a herança é calculada?). Tocar nas permissões é tocar na espinha dorsal da colaboração.

A reformulação envolveu 15 arquivos modificados no frontend, sendo os principais: AssigneesModal.tsx (130 linhas adicionadas, gerenciamento da função de um atribuído em sua pasta), GroupMembersModal.tsx (62 linhas adicionadas, distintivos de acesso), GroupHierarchySection.tsx (346 linhas reformuladas, árvore redesenhada), TaskAccessTree.tsx (24 linhas ajustadas, integração do distintivo no ramo do grupo), e o novo componente PermissionLevelPicker.tsx (186 linhas, modal reutilizável).

No lado da i18n, as novas chaves access.read/write/readWrite/full, access.readDescription/writeDescription/fullDescription, access.permissionLevel, roles.assigned/external foram adicionadas nos seis arquivos de idioma (FR, EN, DE, ES, IT, PT). A tradução foi feita através do nosso script automático OpenRouter com revisão humana para as nuances. Um rótulo incorreto para "Total" em alemão ou "Escrita" em italiano pode ser suficiente para perder toda a legibilidade do recurso.

Que usos familiares e profissionais a granularidade desbloqueia?

O que muda na vida real não é o código. São os cenários de uso que se tornam possíveis sem contornar.

Uma família com adolescente. Tu dás Total ao teu cônjuge na pasta "Casa", Escrita ao teu filho adolescente de 15 anos para que ele possa marcar as suas próprias tarefas sem o risco de apagar as de toda a família, Leitura aos avós que passam o fim de semana e só querem saber se precisam trazer pão.

Um freelancer com um cliente. Tu partilhas a pasta "Site cliente X" com o teu cliente em Leitura (ele vê o progresso, ele comenta), com o teu subcontratado em Escrita (ele modifica o conteúdo sem poder desatribuir-te), com o teu sócio em Total (ele pode gerir tudo se fores de férias).

Uma associação ou uma APE. Tu dás Total à direção (3 pessoas), Escrita aos voluntários ativos (15 pessoas), Leitura aos pais que querem acompanhar a organização da festa da escola sem o risco de modificar o planeamento por acidente.

Um casamento com várias pessoas. Tu dás Total ao teu cônjuge e à testemunha principal, Escrita às quatro damas de honor que ajudam em aspetos específicos, Leitura aos pais e sogros que querem acompanhar os convidados e o planeamento do dia D sem o risco de estragar tudo.

Perguntas frequentes

O proprietário da pasta pode alterar o nível de acesso dos membros após o convite?

Sim. Na tela "Membros" da pasta, o proprietário (e qualquer membro Total) pode modificar o nível de acesso de cada um a qualquer momento, sem precisar reenviar o convite. A alteração é aplicada em tempo real em todos os dispositivos via Supabase Realtime, o membro afetado vê seu nível mudar no aplicativo sem precisar fazer login novamente.

O que acontece se eu der acesso de Leitura a alguém que antes tinha acesso Total?

As contribuições anteriores (tarefas criadas, fotos carregadas, comentários) permanecem na pasta. A pessoa perde apenas a capacidade de modificá-las ou excluí-las. Ela continua a ver todo o conteúdo, mas os botões de edição desaparecem na interface, e as solicitações no servidor são rejeitadas pelas políticas RLS se alguém tentar contornar via uma solicitação direta.

Posso dar acesso Total a alguém em uma subpasta sem dar acesso Total na pasta pai?

Não, a herança desce, mas não sobe. Se tu queres que alguém tenha acesso Total em uma subpasta, essa pessoa precisa ter pelo menos acesso de Leitura na pasta pai (caso contrário, não conseguirá navegar até a subpasta). Tu podes, no entanto, fazer o inverso: dar acesso Total na pasta pai e diminuir para Escrita ou Leitura em uma subpasta específica para proteger uma parte sensível.

Os níveis de acesso também se aplicam a anexos e comentários?

Sim. Um membro com acesso de Leitura pode ver os anexos, mas não pode fazer upload. Ele pode ler os comentários, mas ainda pode escrevê-los e reagir com emojis (o comentário é uma forma de contribuição não destrutiva, aberta a todos os níveis). As políticas RLS são aplicadas de forma consistente nas seis tabelas envolvidas: tarefas, memorandos, eventos, anexos, comentários, reações.

Como é feita a migração para as pastas criadas antes da versão 1.29?

Todos os membros existentes foram migrados para o nível Total (o que corresponde ao comportamento anterior à reformulação). Nenhuma ação do usuário é necessária. Se tu quiseres aproveitar a granularidade em uma pasta existente, basta abrir a tela Membros e ajustar o nível de cada pessoa. A modificação é instantânea, sem rejeição de convite ou perda de dados.

E tu, já deste acesso demasiado amplo a alguém numa aplicação partilhada?

Se tu lês este artigo, é provável que já tenhas vivido a cena pelo menos uma vez. Tu adicionaste um familiar a uma pasta ou projeto, e descobriste alguns dias depois que a pessoa tinha modificado, apagado ou reorganizado algo a que tu davas valor. Não por maldade. Apenas porque a aplicação não te permitia dizer "podes olhar, mas não tocar".

A versão 1.29 do TAMSIV resolve este dilema em dois toques. Tu convidas, escolhes o nível, podes modificá-lo a qualquer momento. O compartilhamento torna-se um cursor, não um interruptor. E talvez seja isso que te dará a coragem de abrir as tuas pastas a um círculo mais amplo do que as duas pessoas que tu convidavas antes.

Baixa TAMSIV gratuitamente na Play Store e testa os novos níveis de acesso a partir da versão 1.29.