Pergunta

Estou desenvolvendo uma galeria que permite aos usuários postar fotos, comentários, votar e fazer muitas outras tarefas.

Agora eu acho que é correto para permitir que os usuários cancelar a inscrição e remover todos os seus dados, se quiserem. No entanto, é difícil de permitir tal coisa, porque você corre o risco de quebrar a sua aplicação (por exemplo, o que devo fazer quando um comentário tem muitas respostas? O que devo fazer com páginas que têm muitas revisões por usuários diferentes?).

As fotos podem ser facilmente removidos, mas para outros dados (ou seja, os comentários, as revisões ...) Pensei que existem três possibilidades:

  • atribuí-lo ao admin
  • atribuí-la a um usuário chamado "removido pelo usuário"
  • mantain as associações atuais (ou seja, o ID de usuário) e apenas os dados do usuário de mudança de nome (por exemplo, atribuir um novo nome de usuário como "removido-user-24" e um inexistente e-mail como "noreply-removeu-user- 24@mysite.com "

O que são as melhores práticas a seguir quando nós permitimos que os usuários removam suas contas? Como você implementá-las (particularmente em Rails)?

Foi útil?

Solução

O ideal em um sistema que você não gostaria de "exclusão dura" de dados. A melhor maneira que eu conheço e que temos implementado no passado é "soft delete". Manter uma coluna de status em todas as suas tabelas de dados que se refere idealmente ao fato de se a linha está ativa ou não. Qualquer linha quando criado é "ativo" por padrão; no entanto como entradas são excluídos; eles são feitos inativo.

Todas as consultas selecionar o monitor de dados sobre resultados do filtro de tela para apenas "registros de ativos". Dessa forma você obtém as seguintes vantagens: 1. A recuperação de dados é possível. 2. Você pode ter uma tarefa agendada no nível de banco de dados, que pode cuidar de exclusões rígidos de uma vez em um caminho; se for realmente necessário. (Como um procedimento SQL ou algo assim) 3. Você pode ter uma tela de administrador para ser capaz de decidir o que explica, entradas etc você realmente deseja marcar para exclusão 4. A temperory desativação da conta também pode ser implementado com a mesma solução.

Em ambientes prod onde tenho trabalhado, uma exclusão dura é uma estrita não-não. auditorias Infact são mantidos para exclusões também. Mas se a aplicação é muito pequeno; seria até usuário.

Eu ainda gostaria de sugerir uma "exclusão virtual" ou um "soft delete" com a limpeza periódica do nível db; que será mais rápido e eficiente maneira otimizada de limpeza.

Outras dicas

Eu normalmente resolvido este tipo de problema por ter uma bandeira ativo no usuário, e simplesmente definir ativo para false quando o usuário é excluído. Dessa forma, eu manter a integridade referencial em todo o sistema, mesmo se um usuário é "excluído". Na camada de negócios Eu sempre validar um usuário está ativo antes de permitir-lhes realizar operações. Eu também filtrar os usuários inativos quando da recuperação de dados.

A coisa usual de fazer é em vez de excluí-los a partir de um banco de dados, adicione um campo booleano e que ele seja verdadeiro para usuários válidos e falso para usuários inválidos. Você terá que adicionar o código para filtrar na bandeira. Você também deve remover todos os dados relevantes do usuário que você pode. O objetivo principal desta bandeira é manter os links intactos. É uma variante dos dados do usuário renomeação, mas a bandeira será mais fácil de verificar.

Eu geralmente não gosto de nada de exclusão e, em vez optar por registros de assinalar como apagado / inédito usando estados (com AASM ou seja, atua como máquina de estado).

Eu prefiro estados e eventos para apenas usando bandeiras como você pode usar eventos para atributos de atualização e e-mails de envio etc. de uma só falta. Em seguida, verifique estados para decidir o que fazer mais tarde.

HTH.

Eu recomendo colocar em um campo de data de exclusão que contém a data / hora que o usuário não subscritas - não só para o registro do usuário, mas para todas as informações relacionadas a esse usuário. O aplicativo deve verificar o campo antes de exibir qualquer coisa. Você pode então executar uma exclusão difícil para todos os registros de 30 dias (a sua escolha de tempo) após a data de exclusão. Isso permitirá que as informações não sejam apresentadas (você provavelmente precisará atualizar o aplicativo em alguns lugares), o tempo para permitir que o usuário re-assinar (acidental ou repensar) e um processo programado para apagar os dados antigos. Eu iria remover todas as informações sobre o membro e quaisquer comentários relacionados sobre o membro ou os seus dados publicados anteriores (fotos, etc.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top