2012-02-23 109 views
0

我閱讀了以下問題的答案:Domain Driven Design and Security但我對答案並不滿意。DDD中的域安全是否存在?

訪問方法或命令很簡單,您可能只是限制角色或類似的東西。一個簡化示例,其中命令對於角色A或B中的用戶均有效(如果x < 100),但僅對用戶B有效(如果x >= 100,其中x是該命令中的參數)。該支票應該放在哪裏?應用程序是否應該在執行命令之前檢查參數,還是應該知道角色等?

我是否讓自己清楚?

回答

2

這是命令的關注點嗎?我的意思是安全檢查在域內自然適合嗎?當一個命令在有界上下文中有相同的意圖時,那麼我認爲相應的聚合根應該確保它在特定上下文中的有效性。

您提到的場景聽起來像是商業規則,而不是簡單的權利檢查。所以我會將域名檢查作爲AR的一部分。

如果用戶可以執行該命令,我也會檢查基礎架構層,但這是爲了正常處理拒絕。像這樣的東西

var ar=repository.Get(id); 
if (ar.CanAddMoney(User,amount)) ar.AddMoney(amount,User) 
else handleForbiddenAction(); 

當然,這是一個模糊問題的非常模糊的解決方案。它很大程度上取決於域的複雜性,我猜想唯一有效的答案是:'取決於'。實際上,爲了直接看標題,DDD中的安全性被表達爲一個有效的模型。

+0

謝謝你的回答。我想我不會得到比這更清楚的東西。也許如果模型正確地建模,這種東西會自然掉下來。 – 2012-02-24 08:06:51