2012-06-13 116 views
1

我開始開發ASP NET MVC 3應用程序,並試圖遵循一些良好的DDD實踐。我有以下情況需要意見。 系統功能之一是創建一個或多個系統用戶參與的活動,例如會議。具有特定訪問配置文件的任何用戶都可以創建新活動,也許只有創建活動的用戶才能更改她。問題是: 什麼是插入此規則的正確位置?ASP NET MVC驗證安全問題

- >在「Activity」實體的每個setter中?似乎打破了幹。

- >在保存更改時存儲庫中?在這種情況下,傳遞用戶權限的正確時機是什麼? 此方法的另一個參數?在類構造函數中(在我的模型中,存儲庫是接口,如果我採用這個選項, 的依賴關係只會在存儲庫實現的基礎結構層中明確表示出來?)

- > Controller?它似乎與貧血模型合作。

順便說一句,問題比比皆是......你怎麼看?

+0

在您的應用服務? –

回答

1

如果您使用的是ASP.NET成員身份,則可以利用角色和配置文件提供程序並使用授權屬性來限制對創建或編輯發生的實際視圖的訪問。例如,創建操作可能是:

[Authorize(Roles="Activity Admin")] 
public ActionResult CreateActivity() 
{ 
    return View(); 
} 

其中「活動管理員」是您的創建者角色。然後您可以編輯這個樣子:

[Authorize(Roles="Activity Admin")] 
public ActionResult EditActivity(int id) 
{ 
    Activity activity = ActivityRepository.GetActivityByID(id); 

    if (activity.CreatorID != CurrentUser.ID) 
    { 
     return RedirectToAction("Activities"); 
    } 

    return View(activity); 
} 

那如果語句做的檢查,以確保當前登錄的用戶是誰實際創建活動的用戶。 CurrentUser.UserID可以替換爲您用來檢索當前登錄用戶的唯一ID的任何方法。我通常使用ProfileBase類來實現一個允許我跟蹤當前用戶信息的類。下面的鏈接到另一個SO問題顯示你如何做到這一點。

How can i use Profilebase class?