我對靈活,合理粒度的安全系統有着廣泛的要求,允許我們自定義給定角色或用戶在系統內允許執行的操作。面對這個需求,我必須選擇安全體系結構中應該使用哪些對象,類或項目作爲其構建塊 - 例如,如果我們授予訪問X的角色,那麼X是什麼?一個實體,一個控制器動作,物體等的自定義列表中的項目如何在MVC + DDD + Repository Pattern項目中應用安全性?
選項我正在考慮。
1)格蘭特通過對實體CRUD操作(例如,用戶可能被授予創建/讀取/更新賬戶實體的訪問權限,以及對發票實體的讀訪問等)
2)通過對實體的CRUD操作授予的權利,對單個實體屬性(例如,訪問更新特定字段)的RU操作 - 可以被簡化與實體屬性標識的「財產組」
3)通過存儲庫授予&存儲庫功能(例如,允許呼叫AccountsRepository.Get(...)或AccountsRepository.GetList(...)等)
4)通過MVC控制器+行動授予(例如允許訪問/帳戶/索引或/帳戶/更新/ X等)
5)格蘭特通過可以在架構
選項(5)給出了最大的靈活性,但至少通用的實現內被捆綁到任意事物「安全對象」的自定義列表。選項(4)具有吸引力,因爲安全項目將密切反映用戶界面,但意味着該域不能保護訪問,並且安全性不會應用於非Web界面。
您的意見&在MVC + DDD + Repository模式中設計安全模式的經驗?
我很好奇域實體級安全性的不成功率。這對我來說似乎是默認的選擇,因爲域應該與UI無關,並且安全性不是UI級別的功能......(否則您的UI開發人員可能無法構建不安全的頁面) –