Полностью удалить данные пользователя из системы

Привет, у нас может возникнуть ситуация, когда нужно полностью удалить все следы пользователя из базы данных. Я не буду вдаваться в подробности, так как это чувствительный вопрос, но также из-за GDPR нам, возможно, придётся доказать, что у нас в системе не осталось никакой копии информации о пользователе.

Я выделил несколько моментов:

  • Текущий процесс анонимизации подходит для профиля пользователя.
  • Замена всех его ответов на «удалено по запросу пользователя» также будет приемлемой, при условии, что история правок будет удалена.

Так что, как мне кажется, мне нужен запрос (или функция на Ruby?), который заменит все сообщения пользователя на «удалено по запросу пользователя» и полностью удалит историю правок для этих сообщений.

Есть ли кто-то с достаточным опытом работы с БД и кодом Discourse, кто сможет помочь?

Можете просто удалить их?

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

а затем вызвать PostDestroyer для всех этих постов. (Я точно не помню, как это делается прямо сейчас.)

Если вы действительно хотите заменить их посты на «удалено по запросу…», то нужно сделать что-то вроде

posts.update_all(raw: "удалено по запросу пользователя")

А затем потребуется очистить данные из модели PostRevision, возможно, так:

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

Рекомендуется сначала протестировать несколько таких операций вручную или на тестовом сайте, если вы действуете очень осторожно.

Не знаю, поэтому и спрашиваю :slight_smile:

Попробую в тестовой среде в ближайшие пару дней. Спасибо пока, Джей, ты всегда на высоте! :heart:

Я бы предпочел редактировать, так как не хочу, чтобы темы уничтожались только потому, что кто-то уходит, в то время как другие могли внести вклад интересными обсуждениями по этой теме.

Есть только одна озабоченность: когда у пользователей тысячи ответов. Я говорю о десятках тысяч.

Если у вас есть запрос от пользователя на удаление всех его данных, это не обязательно означает удаление всех его сообщений/ответов, так как, как вы, вероятно, знаете, для соответствия GDPR может быть достаточно анонимизации, если сообщения не содержат высокоперсональной информации.

Здесь уже было много тем на эту тему, законы различаются в каждой стране.

Действительно, после анонимизации первого пользователя просто объединяйте будущих анонимизированных пользователей с ним.

Это фактически сделает все анонимизированные аккаунты отображаемыми как «удаленный пользователь», как это делают другие платформы, например Discord.

Я бы не рекомендовал всегда делать так, но это один из вариантов, который может защитить личность авторов постов, поскольку случайный номер не будет принадлежать только одному автору. Недостаток этого подхода в том, что может стать сложнее следить за обсуждениями в теме, если непонятно, принадлежат ли посты одному или разным авторам.

Это довольно часто невозможно, особенно с пользователями, у которых много ответов.

Я заметил, что функция слияния пользователей довольно часто не работает, когда я пытаюсь объединить пользователя с тысячами сообщений, даже если у него есть только одно новое сообщение (случай использования: старый пользователь возвращается, но у него нет учетных данных, подтверждение через меня, всё в порядке, попытка объединить нового пользователя с несколькими ответами с оригинальным старым пользователем)

Похоже, нужно подать отчёт об ошибке