ユーザーが自分のアカウントを削除できるようにする
-
21-08-2019 - |
質問
私は、ユーザーが写真を投稿、コメント、投票、その他多くのタスクを実行できるギャラリーを開発しています。
今では、ユーザーが希望に応じて購読を解除し、すべてのデータを削除できるようにするのが正しいと思います。ただし、アプリケーションを壊すリスクがあるため、そのようなことを許可することは困難です(例:コメントにたくさんの返信があった場合はどうすればよいですか?さまざまなユーザーによる多数のリビジョンがあるページはどうすればよいですか?)。
写真は簡単に削除できますが、他のデータ(つまり、コメント、修正...) 私は 3 つの可能性があると考えました。
- 管理者に割り当てます
- それを「removed-user」というユーザーに割り当てます
- 現在の関連付けを維持します (つまり、ユーザー ID) のみを変更し、ユーザーのデータの名前のみを変更します (例:「removed-user-24」などの新しいユーザー名と、「noreply-removed-user-24@mysite.com」などの存在しない電子メールを割り当てます。
ユーザーにアカウントの削除を許可する場合に従うべきベスト プラクティスは何ですか?それらをどのように実装しますか (特に Rails で)。
解決
理想的なシステムでは、データを「ハード削除」したいとは思わないでしょう。私の知っていると我々が過去に実施していることが最良の方法は、「削除ソフト」です。理想的に行がアクティブであるかどうかという事実を指し、すべてのデータテーブルのステータス列を維持します。作成されたすべての行は、デフォルトでは「アクティブ」です。しかし、エントリが削除されます。彼らは非アクティブになります。
唯一の「アクティブレコードの」画面のフィルタ結果のデータを表示するすべてのselectクエリ。あなたは次のような利点を得る。この方法: 1.データ復旧が可能です。 2.あなたはかつての方法でのハード削除の世話をすることができ、データベースレベルでのスケジュールされたタスクを、持つことができます。本当に必要な場合。 (SQLプロシージャか何かのように) 3.あなたが本当に削除のためにマークしたいと思いますどの占め、エントリーなどを決めることができるように管理画面を持つことができます 4.アカウントのtemperory無効化はまた、同じ溶液を用いて実施することができる。
私が働いているのprod環境では、ハード削除は、厳密なノーノーです。 Infactは監査はまた、削除のために維持されています。しかし、アプリケーションは本当に小さい場合。それは、ユーザ件までなると思います。
私はまだデシベルレベルで定期的にクリーンアップして「仮想削除」または「ソフト削除」を示唆しています。これはクリーンアップの高速化、効率的かつ最適化された方法になります。
他のヒント
私は、典型的には、ユーザーにアクティブフラグを有し、単にユーザーが削除されたときにfalseに設定することで、アクティブなこの種の問題を解決してきました。こうすることで、私は、ユーザーが「削除」された場合でも、システム全体で参照整合性を維持します。ビジネス層では、私は常にユーザーを検証彼らが操作を実行できるようにする前にアクティブです。データを取得するとき、私はまた、非アクティブなユーザーをフィルタます。
行うには、通常のものは、ブールフラグフィールドを追加し、それが有効なユーザーのための真と無効なユーザーのための偽である必要があり、代わりにデータベースからそれらを削除するのです。あなたはフラグをフィルタリングするためにコードを追加する必要があります。また、ユーザーということができますから、すべての関連データを削除する必要があります。このフラグの主な目的は、完全なリンクを維持することです。これは、名前の変更、ユーザのデータの変形であるが、フラグをチェックすることが容易になります。
私は一般的に何も削除し、代わりに(ステートマシンとしてAASMすなわち行為で)削除/未公開の使用状態として、レコードをマークすることを選ぶことが好きではありません。
私はあなたの属性を更新し、1話のファウル一挙になどのメールを送信するためにイベントを使用することができますとしての状態やイベントだけでフラグを使用することを好みます。そして、後で何をすべきかを決定するために状態をチェックします。
HTHます。
私は、ユーザー退会した日付/時刻を含む削除日付フィールドに置くことをお勧めします - ユーザーレコードに、しかし、そのユーザーに関連するすべての情報のみならず。アプリは前に何を表示するフィールドをチェックする必要があります。あなたは、ハード30日間(時間のあなたの選択)削除日後にすべてのレコードを削除する実行することができます。この情報は、(おそらくいくつかの場所でアプリを更新する必要があります)、ユーザーを再購読(偶発的または再考)へとスケジュールされたプロセスは、古いデータを削除することを可能にするための時間を示すことがないことができます。私はメンバーとメンバーまたはその前に公表されたデータに関するすべての関連のコメントについてのすべての情報取り外します(写真、など。)