2009-06-29 2 views
2

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

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

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

  • присвоить его админом
  • присвоить его пользователю так называемый «удаленный пользователь»
  • mantain текущие ассоциации (то есть идентификатор пользователя) и только переименование пользовательских данных (например, назначить новое имя пользователя, например «удаленный пользователь-24», и несуществующее электронное письмо, такое как «удаленный пользователь», [email protected] "

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

ответ

1

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

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

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

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

+1

Что относительно конфиденциальности? Пользователь может пожаловаться на то, что вы не удалили его имя, его электронную почту и т. Д. (Даже если кто-либо никогда не увидит эту информацию). Думаешь, мне это не должно волновать? (Я знаю, что я слишком точен;)) – collimarco

+1

Я знаю, что сценарий произойдет; однако здесь немного вещей. 1. Пользователь будет в первую очередь заботиться о том, чтобы данные никогда больше не показывались никому и не использовались каким-либо образом; что в любом случае не будет, потому что он будет бездействующим, неактивным и непригодным, поскольку он не будет отображаться нигде на экране. Как вы думаете, Gmail удаляет вашу электронную почту? Нет, они этого не делают; всегда есть неактивная копия, которая использовалась в судебных решениях несколько раз. 2. Если вы действительно хотите удалить данные на самом деле, я уже предложил процедуру PL/SQL с жестким удалением, которая может позаботиться об этом более эффективным и способным образом. – Priyank

+0

Вы можете запускать эту процедуру на периодической основе без немедленной загрузки системы. Такие процедуры или сценарии хороши для меньшего количества часов движения. – Priyank

2

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

+0

Полезная идея! Считаете ли вы, что имя пользователя должно быть удалено? – collimarco

+1

Это зависит от того, как они используются. Если они отображаются, вы можете превратить их во что-то, чтобы пользователь не чувствовал, что их данные все еще видны (хотя это можно сделать и при отображении). Если имена пользователей уникальны, вам придется позаботиться об их изменении, чтобы избежать конфликтов. –

1

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

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

HTH.

5

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

+2

Да, это простой подход. Но .. как насчет конфиденциальности? Пользователь может пожаловаться на то, что вы не удалили его имя, его электронную почту и т. Д. (Даже если кто-либо никогда не увидит эту информацию). – collimarco

+1

Вы можете удалить адрес электронной почты и всю контактную информацию. Важными являются ссылки. Кроме того, если вы все сделаете правильно, данные будут полностью скрыты от любого внешнего вида. –

+0

также, если вы удалите все конкретные данные у пользователя и все еще хотите сохранить часть контента, который опубликовал пользователь, вы можете использовать простой метод getter для визуализации «удаленного пользователя» и по-прежнему показывать контент (если это нормально с вашим TOS) –

1

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

Смежные вопросы