Domanda

Sto sviluppando una galleria che permette agli utenti di inviare foto, commenti, voti e fanno molte altre attività.

Ora penso che sia corretto per consentire agli utenti di annullare l'iscrizione e rimuovere tutti i loro dati, se vogliono. Tuttavia è difficile permettere una cosa del genere, perché si corre il rischio di rompere l'applicazione (ad esempio, che cosa devo fare quando un commento ha molte risposte? Cosa devo fare con le pagine che hanno molte revisioni da parte di diversi utenti?).

Le foto possono essere facilmente rimossi, ma per altri dati (cioè commenti, revisioni ...) ho pensato che ci sono tre possibilità:

  • assegnarlo alla amministrazione
  • assegnazione a un utente chiamato "rimosso-utente"
  • mantenere le associazioni correnti (cioè l'ID utente) e rinominare solo i dati degli utenti (ad esempio, assegnare un nuovo nome utente come "rimosso-user-24" e un inesistente e-mail come "noreply-rimosso-dall'utente 24@mysite.com "

Quali sono le migliori pratiche da seguire quando permettiamo agli utenti di rimuovere i loro conti? Come è possibile realizzare loro (in particolare in Rails)?

È stato utile?

Soluzione

Idealmente in un sistema che non vorresti a "eliminare duro" dei dati. Il modo migliore che conosco e che abbiamo attuato in passato è "soft delete". Mantenere una colonna di stato in tutte le vostre tabelle di dati che fa riferimento ideale al fatto se la riga è attivo o meno. Ogni riga quando crea è "attivo" per impostazione predefinita; tuttavia, come voci vengono eliminate; vengono rese inattive.

Tutte le query selezionare quale schermo i dati sui risultati del filtro schermo solo per "record attivi". In questo modo si ottiene i seguenti vantaggi: 1. Il recupero dei dati è possibile. 2. Si può avere un'operazione pianificata a livello di database, che può prendersi cura di eliminazioni dure di una volta in un modo; se veramente necessario. (Come una procedura di SQL o qualcosa del genere) 3. Si può avere uno schermo di amministrazione per essere in grado di decidere che rappresenta, voci ecc sareste davvero vuole segnare per l'eliminazione 4. disabilitazione temperory di account può essere implementata anche con la stessa soluzione.

In ambienti prod dove ho lavorato, un delete duro è un rigoroso no-no. Infact verifiche sono mantenuti per elimina anche. Ma se l'applicazione è davvero piccolo; sarebbe fino a utente.

Vorrei ancora suggerire un "virtuale cancellazione" o un "soft delete" con pulizia periodica a livello db; che sarà il modo più veloce ed efficiente ottimizzata di pulizia.

Altri suggerimenti

Sono in genere risolto questo tipo di problema da avere una bandiera attivo dell'utente, e semplicemente impostando attiva a false quando l'utente viene eliminato. In questo modo ho mantenere l'integrità referenziale in tutto il sistema, anche se un utente viene "cancellato". Nello strato di business ho sempre convalidare un utente è attivo prima di consentire loro di eseguire le operazioni. Ho anche filtrare gli utenti inattivi durante il recupero dei dati.

La solita cosa da fare è invece di cancellarli da un database, aggiungere un campo booleano e lo hanno essere vero per gli utenti validi e falso per gli utenti non validi. Si dovrà aggiungere il codice per filtrare sulla bandiera. Si dovrebbe anche rimuovere tutti i dati rilevanti da parte dell'utente che si può. Lo scopo principale di questo flag è quello di mantenere intatti i collegamenti. Si tratta di una variante dei ridenominazione dati dell'utente, ma la bandiera sarà più facile da controllare.

Io in genere non mi piace per eliminare qualsiasi cosa e invece optare per contrassegnare i record come cancellati / inedite stati utilizzando (con AASM ovvero agisce come macchina dello Stato).

Io preferisco stati ed eventi a solo usando le bandiere come è possibile utilizzare gli eventi per aggiornare gli attributi e inviare e-mail, ecc in un sol fallo. Poi controlla gli Stati a decidere cosa fare in seguito.

HTH.

mi sento di raccomandare di mettere in un campo data di eliminazione che contiene la data / ora che l'utente non sottoscritte - non solo per il record utente, ma a tutte le informazioni relative a tale utente. L'applicazione dovrebbe controllare il campo prima di visualizzare qualsiasi cosa. È quindi possibile eseguire un hard eliminare per tutti i record 30 giorni (a scelta del tempo) dopo la data di eliminazione. Questo permetterà l'informazione non deve essere mostrato (probabilmente sarà necessario aggiornare l'applicazione in alcuni punti), il tempo di consentire all'utente di ri-iscriversi (accidentale o ripensamento) e un processo programmato per cancellare i vecchi dati. Vorrei rimuovere tutte le informazioni riguardanti l'utente e gli eventuali relativi commenti circa il membro o dei loro dati pubblicati precedenti (foto, ecc.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top