2012-05-01 27 views
2

語境徵求意見:比如級別的安全

  1. 的電子商務市場中,賣家列表中的項目
  2. 有一種操作項目:: setPrice
  3. 項目或客戶服務代表的賣方架構藍圖可以改變物品的價格。
  4. #3的安全檢查在物品的數據訪問層附近實施,以最大化安全檢查的覆蓋範圍。鄉親

地塊的喜歡談論安全作爲正交關注但我(目前?)不與板想着尤其是當有關實例級別的安全性,因爲這是無情地綁在域模型。底線是,我實際上更喜歡,#3中的安全不變性在代碼中(通過代碼或通過Spring Security EL註釋)明確表示。我認爲這種安全不變量是業務邏輯的一部分。我也希望開發者的臉上安全。這與IMO的責任並不是正交的。

我可能會寫這樣的:

@PreAuthorize("hasRole('CSR_ITEM_WRITER') or #item.seller.id == principal.id') 
public void setPrice(Item item, Money price) { ... } 

我意識到,當涉及到不斷變化的安全模型(但就是這樣一件壞事考慮了走錯路的影響這造成了一定的靈活性呢? )

我們還討論了CS代表必須「成爲」賣方的方法。這有一定的清潔度(因爲這確實關注了域的安全模型而不是用例)。 (N.B.將進行充分的審計以檢測某人是否代表另一人行事)

意見?

回答

0

我認爲你做得很對。當你說安全是一個正交關注時,與什麼正交?當你說這應該是商業邏輯的一部分時,你是正確的110%。

我會保持REP和賣方之間的分離。兩者都是獨特的角色;它們碰巧在這個特定情況下有重疊。

考慮到在這種情況下安全性的重要性,我希望你會寫一個sh * t的單元測試風暴,證明給出了與該選項相關的角色的適當結果。

0

我認爲你在做什麼是一個好主意(我目前正在做類似的事情)。

我會建議你採取在Spring Security看看PermissionEvaluator組件(見here)因爲它比普通的註解一些優勢

  1. 您的安全機制,可以改變容易,因爲它是更全局
  2. 安全評估可以通過審計日誌/監控/輕鬆擴展...
  3. 評估員實施進行單元測試(註釋需要一個正在運行的Spring上下文的工作,所以他們只能在集成測試進行測試)

到目前爲止,我發現這個想法沒有直接的缺點。