我正在开发一个画廊,允许用户发布照片、评论、投票和执行许多其他任务。

现在我认为允许用户取消订阅并删除他们所有的数据(如果他们愿意)是正确的。然而,很难允许这样的事情发生,因为你冒着破坏你的应用程序的风险(例如当评论有很多回复时我该怎么办?对于有不同用户多次修改的页面我该怎么办?)。

照片可以轻松删除,但对于其他数据(即评论、修改...)我认为有三种可能性:

  • 将其分配给管理员
  • 将其分配给名为“removed-user”的用户
  • 维持当前的关联(即用户 ID)并且仅重命名用户的数据(例如分配一个新的用户名(例如“removed-user-24”)和一个不存在的电子邮件(例如“noreply-removed-user-24@mysite.com”)

当我们允许用户删除其帐户时,应遵循哪些最佳实践?你如何实现它们(特别是在 Rails 中)?

有帮助吗?

解决方案

理想情况下,在系统中您不希望“硬删除”数据。据我所知,我们过去实施的最好方法是“软删除”。在所有数据表中维护一个状态列,理想情况下它指的是该行是否处于活动状态。默认情况下,任何行在创建时都是“活动的”;然而,随着条目被删除;他们变得不活跃。

所有在屏幕上显示数据的选择查询仅筛选“活动记录”的结果。这样您可以获得以下优势:1.数据恢复是可能的。2.你可以在数据库级别有一个计划任务,它可以处理一次硬删除;如果确实需要的话。(例如SQL程序或其他内容)3。您可以拥有一个管理屏幕,以便能够确定您真正想为DELETION 4标记的哪些帐户,条目等。也可以使用相同的解决方案来实现帐户的临时禁用。

在我工作过的产品环境中,硬删除是严格禁止的。事实上,还对删除进行审核。但如果应用确实很小;这取决于用户。

我仍然建议在数据库级别进行“虚拟删除”或“软删除”并定期清理;这将是更快、更高效、更优化的清理方式。

其他提示

我通常通过在用户上设置活动标志并在删除用户时将活动设置为 false 来解决此类问题。这样,即使用户被“删除”,我也可以在整个系统中保持引用完整性。在业务层中,我总是在允许用户执行操作之前验证用户是否处于活动状态。我还在检索数据时过滤不活跃的用户。

通常要做的事情不是从数据库中删除它们,而是添加一个布尔标志字段,并使其对于有效用户为 true,对于无效用户为 false。您必须添加代码来过滤该标志。您还应该尽可能删除用户的所有相关数据。该标志的主要目的是保持链接完整。它是重命名用户数据的变体,但该标志将更容易检查。

我通常不喜欢删除任何内容,而是选择使用状态将记录标记为已删除/未发布(使用 AASM,即充当状态机)。

我更喜欢状态和事件而不是仅使用标志,因为您可以使用事件来更新属性和发送电子邮件等。一举一动。然后检查状态以决定稍后要做什么。

HTH。

我建议放入一个删除日期字段,其中包含用户取消订阅的日期/时间 - 不仅是用户记录,还包括与该用户相关的所有信息。应用程序应在显示任何内容之前检查该字段。然后,您可以在删除日期后 30 天(您选择的时间)对所有记录运行硬删除。这将允许不显示信息(您可能需要在几个地方更新应用程序)、允许用户重新订阅(意外或重新考虑)的时间以及删除旧数据的预定过程。我将删除有关该会员的所有信息以及有关该会员或其之前发布的数据(照片等)的任何相关评论

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top