Ir para o conteúdo
DedicatedPHP Contato

Como projetar um processo de consentimento revogável em uma aplicação PHP

Modele o consentimento como um estado explícito e auditável: registre seu escopo, verifique-o ao executar cada ação e gerencie sua retirada.

Diagrama dos estados de consentimento em uma aplicação PHP, da concessão à retirada e sua propagação para tarefas e integrações

Uma caixa marcada em um formulário não basta para construir um processo confiável de consentimento. A aplicação deve saber qual autorização foi concedida, para qual ação, quando e com que escopo; também deve poder deixar de agir quando ela for retirada. Esse projeto é especialmente relevante para funções opcionais, como comunicações ou tratamentos que não são necessários para prestar o serviço principal.

Projetar um processo de consentimento revogável em aplicações PHP exige separar decisões que muitas vezes acabam misturadas em um único indicador. Isso, por si só, não determina se uma prática está em conformidade com a regulamentação aplicável: transforma decisões de produto e instruções revisadas por especialistas em comportamento técnico verificável.

Delimitar a ação e separar conceitos

Delimitar a ação e separar conceitos — guía visual de DedicatedPHP

Comece descrevendo a ação específica que requer autorização. “Aceitar tudo” é difícil de interpretar e revogar; “receber comunicações promocionais por e-mail” delimita melhor a finalidade e o canal. Se a finalidade ou o escopo mudar de forma significativa, não presuma que o consentimento anterior continua válido automaticamente.

Diferencie o consentimento de conceitos relacionados:

  • Termos de uso: expressam condições contratuais ou de acesso; aceitá-los não equivale, por si só, a autorizar um tratamento opcional.
  • Preferências: descrevem escolhas de apresentação ou configuração. Podem exigir consentimento, mas nem sempre o representam.
  • Permissões de acesso: controlam o que uma identidade autenticada pode fazer no sistema. Revogar uma autorização opcional não deve desativar automaticamente a conta.
  • Consentimento: registra uma decisão sobre uma finalidade e um escopo definidos, de acordo com o critério funcional e jurídico adotado.

Documente cada finalidade em um catálogo estável, com uma descrição compreensível para a interface e uma referência interna para o código. Evite reutilizar uma chave genérica como accepted para finalidades diferentes.

Modelar o estado e suas mudanças

Um modelo útil identifica o sujeito, a finalidade, o escopo, o estado, a origem da decisão e os registros de data e hora. O sujeito pode ser uma conta ou uma identidade vinculada; a escolha depende de como o consentimento se relaciona com pessoas, contas e canais. Armazene apenas os dados necessários para operar e explicar a decisão.

Em vez de representar tudo com um booleano sem contexto, mantenha um registro atual consultável e, se o requisito de auditoria justificar, eventos imutáveis ou registrados apenas por acréscimo. Um evento pode incluir:

  • Identificador do sujeito e chave da finalidade.
  • Ação registrada, por exemplo, concessão ou retirada.
  • Escopo aplicável, como canal ou categoria.
  • Data e hora do servidor em um formato consistente.
  • Origem, como formulário autenticado ou fluxo administrativo, sem coletar dados excessivos.
  • Identificador de correlação ou versão da definição, quando isso ajudar a investigar mudanças.

O registro de eventos fornece rastreabilidade, mas não comprova automaticamente que a solicitação foi clara, que a interface foi bem apresentada ou que a decisão é juridicamente válida. Evite armazenar cópias desnecessárias de formulários, endereços IP ou outros dados sensíveis como substituto de um desenho adequado.

Em PHP, concentre as operações em um serviço de domínio, por exemplo ConsentService, em vez de permitir que cada controlador grave diretamente o estado. A atualização do estado vigente e a inserção do evento devem ocorrer em uma transação do banco de dados quando compartilharem o mesmo armazenamento.

Verificar a autorização no ponto de execução

A interface pode ocultar uma opção quando não há autorização, mas isso não é um controle suficiente. A verificação deve ocorrer no ponto que inicia a ação: antes de enfileirar um envio, processar um tratamento opcional ou chamar uma integração externa. Uma mensagem pendente, gerada antes da retirada, também deve ser verificada antes do envio.

Uma operação de domínio pode consultar uma interface como ConsentRepository::isGranted($subjectId, $purpose, $scope). O nome é ilustrativo: o resultado deve considerar o estado vigente, a finalidade exata, o escopo e qualquer regra de expiração ou versão definida pelo produto. Não transforme o consentimento para um canal em autorização para outro.

Se a execução for assíncrona, transmita identificadores e consulte novamente o estado ao processar o trabalho, em vez de confiar em uma cópia antiga enviada pelo formulário. Em caso de indisponibilidade do repositório, defina explicitamente o comportamento: para uma ação opcional sensível, normalmente é mais seguro não executá-la até que seja possível verificar a autorização. Registre a falha operacional sem expor dados desnecessários.

Retirar o consentimento e propagar a mudança

A retirada é uma transição explícita de estado, não a exclusão silenciosa do histórico nem a revogação da sessão. O usuário pode continuar autenticado e manter o acesso ao serviço enquanto a ação opcional autorizada é interrompida. Da mesma forma, retirar um consentimento não implica excluir automaticamente todos os dados: a retenção, a exclusão ou o tratamento posterior podem depender de requisitos distintos, que devem ser definidos com a orientação adequada.

Ao registrar a retirada, atualize o estado consultado pela aplicação e emita um evento que permita coordenar tarefas subsequentes. Identifique os pontos de propagação: trabalhos na fila, agendadores, sistemas de comunicação e integrações. Para evitar efeitos inconsistentes, use padrões como uma tabela de saída transacional (outbox) e consumidores idempotentes; defina o que acontece se uma integração estiver indisponível.

Nem sempre é possível desfazer um efeito já executado, como uma mensagem entregue. Por isso, diferencie impedir ações futuras, cancelar tarefas ainda pendentes e corrigir efeitos já produzidos. Informe o resultado com precisão e mantenha um mecanismo de nova tentativa ou revisão operacional para falhas de propagação.

Testar limites, repetição e falhas parciais

Os testes devem abranger o ciclo completo, não apenas verificar se o formulário salva uma opção. Inclua concessão, rejeição, retirada, mudanças de finalidade e solicitações repetidas. Verifique se repetir uma retirada não reativa o consentimento e se eventos duplicados não provocam envios duplicados nem estados contraditórios.

  • Verifique se uma ação não é iniciada quando não existe autorização vigente para aquela finalidade e escopo.
  • Retire o consentimento depois de criar um trabalho e confirme que o consumidor o verifica novamente antes de agir.
  • Simule uma falha entre a atualização do estado e a notificação a uma integração; verifique se a reconciliação consegue concluir a propagação.
  • Teste estados antigos, dados ausentes e erros do repositório, com o comportamento seguro definido.
  • Verifique se retirar uma finalidade não altera outras finalidades, as permissões de acesso nem a sessão.

Registre métricas operacionais e erros de processamento sem transformar os registros técnicos em um repositório paralelo de informações pessoais. Revise periodicamente as tarefas pendentes e as divergências entre o estado central e as integrações.

Definir responsabilidades antes de implantar

Definir responsabilidades antes de implantar — guía visual de DedicatedPHP

Produto deve definir as finalidades, o escopo, o texto e a experiência de retirada; tecnologia deve fazer cumprir essas decisões em cada caminho de execução. Segurança e especialistas jurídicos podem revisar o modelo de ameaças, a minimização de dados, os prazos de retenção e a interpretação aplicável. A implementação não substitui essa revisão.

Antes de implantar, documente quais ações dependem de cada finalidade, quem pode alterar suas definições e como os erros são corrigidos. Assim, o consentimento deixa de ser uma caixa isolada e se torna uma condição verificável, rastreável e propagável dentro da aplicação PHP.

Deseja aplicar essas ideias ao seu projeto?Vamos discutir sua plataforma PHP.
Veja os serviços relacionados