Как отслеживать изменения пользователя в объектах в веб-приложении? - PullRequest
0 голосов
/ 06 апреля 2011

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

Допустим, у нас есть этот сценарий:

  1. Пользователь X входит в систему и обновляет несколько полей в своем профиле, скажем, адрес электронной почты.
  2. Это приводит к тому, что пользователь помечается как обновленный, и администратор должен проверить это
  3. В интерфейсе администратора мы хотим выделить измененные поля

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

Приложение написано на Java / JSF с Hibernate и MySQL для доступа к данным и их хранения.

Спасибо!

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Вы можете создать таблицу в БД для изменений ...

  1. Прежде чем записывать какие-либо изменения в базу данных, запустите запрос на выборку, чтобы получить существующие данные и сравнить их (чтобы найти изменения)
  2. измененные поля записываются в таблицу (идентификатор, метка времени, идентификатор_пользователя, поле, старое_значение, новое_значение)
  3. здесь что-то происходит ... либо оповещение по электронной почте, либо просто всякий раз, когда администратор входит в систему, он выводит записи этой таблицы, где администратор может выбрать их утверждение / игнорирование (таким образом, удаляя их из таблицы изменений).

Если вам не нужно сохранять старые значения, просто опустите столбец old_value в таблице изменений.

1 голос
/ 06 апреля 2011

В зависимости от вашего варианта использования я бы выбрал что-то вроде этого:

Создайте таблицу «log» со следующей структурой:

Username|Fieldname        |Processed
Pamar   |Profile.Email    |No
Pamar   |Homepage.Blurb   |No

Установите триггеры на полях, которые вы хотите отслеживать. При каждом изменении «зарегистрированного» поля триггер создает запись, которая указывает на пользователя и имя поля.

Часть приложения с тегами позволит администратору запрашивать таблицу журналов (выбирая только «необработанные» записи) и обрабатывать одно или несколько полей одновременно. Вы не предоставляете много подробностей о процессе тегирования / индексирования, но этой таблицы должно быть достаточно для правильной идентификации измененных полей (и вы можете запросить их напрямую, чтобы получить доступ к текущему значению, и это все, что вам нужно). После обработки (индексирования) данного обновления вы можете установить для его флага «Обработано» значение «Да» (или удалить его по вашему выбору).

При желании вы можете иметь поле метки времени, если вы хотите, например, обрабатывать ваши обновления в том же порядке, в котором они были сделаны пользователями.

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

1 голос
/ 06 апреля 2011

Посмотрите на Hibernate Envers . - Он обеспечивает аудит и управление версиями, но это слишком жирно для вашего использования.

...