2011-06-21 79 views
5

我有一個要求,即只有超級管理員才能修改「實時」數據。使用實體框架批准對實時數據的更改

目前,如果一個普通的管理員想要做出改變生活的數據: -

  1. 一個超級管理員取消發佈的數據
  2. 普通管理員,使他們改變
  3. 一個超級管理員批准更改併發布數據

如果我想嘗試消除第1步並讓舊數據保持活動狀態,直到超級用戶批准更改,我的選擇是什麼?

我使用ASP.NET MVC和EF4所以我在各地的EF解決方案,可以是透明的,以我的控制器特別感興趣,但是我也有興趣聽取有關數據庫層的解決方案(或針對完全不同的上下文)

+0

您能否提供有關您的數據庫設計的信息,其中哪些字段(哪些字段)和關係將發佈並需要審批? –

+0

我更多地尋找通用解決方案,而不是特定於架構的解決方案。某種解決方案對某些實體而不是其他人有用嗎? –

+0

EF提供了在保存前自定義生成的代碼並驗證更改的方法。但是,您的批准等邏輯是業務邏輯和EF只是一個數據訪問層。此外,管理員將如何可視化未經批准的更改,這也是業務邏輯的一部分。單個項目沒有問題,但是對象層次結構很複雜以進行概括。 –

回答

5

首先,因爲你談論的是基於角色的活動發生,我覺得要拿出不涉及應用/業務層的一個合適的解決方案很難。我相信你的數據訪問層應該忘記超級管理員或普通管理員正在調用它的方法。

在任何情況下,處理這一個方法是創建一個PendingChanges表與普通管理員將更改保存到它表明它的待審批狀態的標誌。然後,一旦超級管理員批准它,您將來自PendingChanges的記錄複製到活動表中。

+0

我編輯了措辭。理想情況下,我想將這種擔憂控制在控制器之外 - 要麼在上下文對象中處理,要麼在服務層中處理。 –

1

我會盡量給一個簡單的對象圖的例子。

考慮一個具有以下結構的博客。

Posts 
    PostID 
    Title 
    Description 

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

在這裏我的邏輯將顯示帖子及其最新更新和批准PostUpdate。現在在這種情況下,實際上沒有任何修改。總是添加一組新的更改,您可以決定刪除舊版本。

在保存,添加在PostUpdates新PostUpdate條目。

爲超級管理員,您可以顯示所有更新,讓他批准正確的。當管理員決定批准更新時,Post將使用上次批准的PostUpdate的內容進行修改。

另一種選擇(更通用)

您可以創建一個表如下,

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

但在這種情況下,你將不得不使用反射來避免存儲值DB,而是創造新的RowUpdate只有當管理員批准它時,實際值應該在做反射映射後發佈到數據庫。