彻底删除系统中的用户数据

嘿,我们可能需要一种完全抹去数据库中用户所有痕迹的方法。我不会详述,因为这很敏感,而且由于 GDPR,我们可能需要证明我们的系统中不保留任何用户信息的副本。

我认为我识别出了一些部分:

  • 当前的匿名化流程对用户配置文件来说是可以的
  • 将其所有回复编辑为简单的“用户请求删除”也可以接受,前提是删除编辑历史记录。

所以,我真正认为我需要的是一个查询(或一个 Ruby 函数?),它可以将用户的所有消息替换为“用户请求删除”,并清除其消息的所有编辑历史记录。

有谁拥有足够的数据库/Discourse 代码经验可以提供帮助吗?

你能把它们都删掉吗?

u=User.find_by_username('byebye')
posts=Post.where(user_id: u.id)

然后对所有帖子调用 PostDestroyer。(我不记得具体怎么做了。)

如果你真的想用“已删除……”替换他们的帖子,那么你会这样做:

posts.update_all(raw: "deleted by user request")

然后你需要清除 PostRevision 模型中的内容,也许是:

posts.each do |p|
  bad=PostRevision.where(post_id: p.id)
  bad.destroy_all
end

你想手动做几个作为测试,或者在暂存站点上进行,如果你非常小心的话。

2 个赞

我不知道,所以我才问 :slight_smile:

我会在未来几天在测试环境中尝试一下。谢谢你,Jay,你总是那么棒!:heart:

我宁愿编辑,因为我不想因为有人离开而导致帖子被毁,而其他人可能对该主题进行了有趣的讨论。

只有一个顾虑是当用户有大量回复时。我说的是成千上万的回复。

2 个赞

如果您收到用户要求删除其所有数据的请求,这不一定包括他们所有的帖子/回复,因为您可能知道,对于《通用数据保护条例》(GDPR) 来说,匿名化可能就足够了,前提是这些帖子不包含高度个人信息。

这里有很多关于这方面的主题,法律因国家而异。

2 个赞

确实,在第一个用户被匿名化后,只需将后续被匿名化的用户合并到第一个用户即可。

这实际上将使所有匿名用户像Discord等其他平台一样被视为“已删除用户”。

我不建议总是这样做,但这是保护帖子作者身份的一种选择,因为随机数将不再只属于一个作者。缺点是,如果用户不知道帖子是否来自同一作者或不同作者,那么跟踪主题对话可能会变得更加困难。

这几乎是不可能的,特别是对于有很多回复的用户。

我注意到,当我尝试合并一个拥有数千条消息的用户时,合并用户功能经常会失败,即使只添加一条新消息(用例是:老用户回归但丢失了凭证,与我核实后一切正常,尝试将有几条回复的新用户与原来的老用户合并)。

听起来你需要提交一个 bug 报告。

1 个赞