Разрешить пользователям удалять свои учетные записи

StackOverflow https://stackoverflow.com/questions/1058311

  •  21-08-2019
  •  | 
  •  

Вопрос

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

Теперь я думаю, что правильно разрешить пользователям отписываться и удалять все свои данные, если они этого хотят.Однако это трудно допустить, потому что вы рискуете сломать свое приложение (напримерчто мне следует делать, если на комментарий получено много ответов?что мне следует делать со страницами, которые имеют много правок разных пользователей?).

Фотографии могут быть легко удалены, но для других данных (напримеркомментарии, исправления ...) Я думал, что есть три возможности:

  • назначьте его администратору
  • назначьте его пользователю с именем "удаленный пользователь".
  • поддерживайте текущие ассоциации (т.е.идентификатор пользователя) и переименовывать только данные пользователя (напримерназначьте новое имя пользователя, например "удаленный пользователь-24", и несуществующий адрес электронной почты, например "noreply-removed-user-24@mysite.com"

Каким рекомендациям следует следовать, когда мы разрешаем пользователям удалять свои учетные записи?Как вы их реализуете (особенно в Rails)?

Это было полезно?

Решение

В идеале в системе, которую вы не хотели бы "жестко удалять" данные.Лучший способ, который я знаю и который мы реализовывали в прошлом, - это "мягкое удаление".Поддерживайте столбец состояния во всех ваших таблицах данных, который в идеале указывает на тот факт, активна строка или нет.Любая строка при создании по умолчанию является "Активной";однако по мере удаления записей;они становятся неактивными.

Все запросы select, которые отображают данные на экране, фильтруют результаты только для "активных записей".Таким образом, вы получаете следующие преимущества:1.Восстановление данных возможно.2.У вас может быть запланированная задача на уровне базы данных, которая может позаботиться о жестких удалениях один раз в пути;если это действительно необходимо.(Например, процедура SQL или что-то в этом роде) 3.У вас может быть экран администратора, чтобы иметь возможность решать, какие учетные записи, записи и т.д. Вы действительно хотели бы пометить для удаления 4.Временное отключение учетной записи также может быть реализовано с помощью того же решения.

В средах prod, над которыми я работал, жесткое удаление - это строгий Запрет.Для удалений также ведутся фактические аудиты.Но если приложение действительно маленькое;это будет зависеть от пользователя.

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

Другие советы

Обычно я решал проблемы такого типа, устанавливая флаг active для пользователя и просто устанавливая значение active равным false, когда пользователь удаляется.Таким образом, я поддерживаю ссылочную целостность во всей системе, даже если пользователь "удален".На бизнес-уровне я всегда проверяю, активен ли пользователь, прежде чем разрешить ему выполнять операции.Я также фильтрую неактивных пользователей при извлечении данных.

Обычно вместо удаления их из базы данных нужно добавить поле boolean flag и сделать так, чтобы оно было true для допустимых пользователей и false для недопустимых.Вам нужно будет добавить код для фильтрации по флагу.Вы также должны удалить все релевантные данные пользователя, какие только сможете.Основная цель этого флага - сохранить ссылки нетронутыми.Это вариант переименования пользовательских данных, но проверить флаг будет проще.

Обычно мне не нравится что-либо удалять, и вместо этого я предпочитаю помечать записи как удаленные / неопубликованные, используя состояния (с помощью AASM, т. е.действует как государственная машина).

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

ХТХ.

Я бы рекомендовал ввести поле даты удаления, которое содержит дату / время, когда пользователь отписался - не только от записи пользователя, но и от всей информации, связанной с этим пользователем.Приложение должно проверить это поле перед отображением чего-либо.Затем вы можете выполнить жесткое удаление для всех записей через 30 дней (время по вашему выбору) после даты удаления.Это позволит не показывать информацию (вероятно, вам потребуется обновить приложение в нескольких местах), даст пользователю время для повторной подписки (случайной или переосмысленной) и запланированный процесс удаления старых данных.Я бы удалил ВСЮ информацию об участнике и любые связанные с этим комментарии об участнике или их ранее опубликованные данные (фотографии и т.д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top