Утверждение изменений в реальных данных с использованием Entity Framework - PullRequest
5 голосов
/ 21 июня 2011

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

В настоящее время, если обычный администратор хочет внести изменения в живые данные: -

  1. Супер-администратор отменяет публикацию данных
  2. Обычный администратор вносит свои изменения
  3. Супер-администратор утверждает изменения и публикует данные

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

Я использую ASP.NET MVC и EF4, и поэтому я особенно заинтересован в решениях вокругEF, который можно сделать прозрачным для моего контроллера, однако мне также интересно услышать о решениях на уровне базы данных (или для совершенно разных контекстов)

Ответы [ 2 ]

5 голосов
/ 21 июня 2011

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

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

1 голос
/ 23 июня 2011

Я попытаюсь привести простой пример графа объектов.

Рассмотрим блог со следующей структурой.

Posts
  PostID
  Title
  Description

PostUpdates
  PostUpdateID
  PostID
  Title
  Description
  DateUpdated
  UpdatedBy
  ApprovedBy
  PostStatus(Approved/Rejected)

Здесь моя логика будет отображать сообщение и его последнее обновление и одобрение PostUpdate.Теперь в этом случае, ничего на самом деле не модифицируется.Всегда добавляется новый набор изменений, вы можете решить удалить старые версии.

Для сохранения вы добавляете новую запись PostUpdate в PostUpdates.

Для Супер Администратора вы можете отобразить все обновления и позволить ему утвердить правильное.Когда администратор решит одобрить обновление, сообщение будет изменено с учетом содержимого последнего утвержденного PostUpdate.

Другая альтернатива (более общая)

Вы можете создать таблицу следующим образом:

RowUpdates
   RowUpdateID
   TableName
   TableKey
   NewValues (kind of XML store to save which fields were modified)
   UpdatedBy
   ApprovedBy
   DateUpdated
   UpdateStatus (Approved/Rejected)

Но в этом случае вам придется использовать отражение, чтобы избежать сохранения значений вDB и вместо этого создайте новую запись RowUpdate, и только если администратор одобрит ее, фактические значения должны быть опубликованы в БД после выполнения отображения отражения.

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