有沒有人有任何關於強制記錄級授權,同時保持ASP.Net MVC網站內的關注點分離的好方法的建議?MVC/ASP.Net記錄級授權的最佳實踐
用的PrincipalPermission,您可以裝飾的方法有:
PrincipalPermission(SecurityAction.Demand, Role = "GroupLeader")
要求對任何遊客到該頁面是固定的作用「GroupLeader」中的一員。
或者,你可以裝飾用的方法:
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Manage", Resource = "Group")]
要求對任何遊客到該頁面被允許一般管理一組。
但是,這些都不能解決用戶可能有權編輯某些組的情況,而不是其他情況。據我所知,即使我實現了自定義ClaimsAuthorizationManager
,也無法訪問方法參數以執行條件授權。
此外,上述兩種方法只是拋出一個SecurityException
如果用戶沒有訪問,而不是允許的方法向用戶正常重定向到解釋發生了什麼,他們可能會做,以獲得必要的授權什麼頁面。很明顯,我也意識到我可以將授權邏輯編碼到方法本身並進行相應的重定向,但我寧願將其分開,並儘可能保持方法代碼的清潔,以便僅處理實際處理請求,並且還處理能夠在一個更通用的框架內工作。
那麼,是否有一個「開箱即用」的方式來處理這種情況,或者我必須實現一個自定義的IAuthorizationFilter
?我認爲我可以處理記錄級別的授權和優雅的重定向,但是在方法級別沒有任何參數,它本質上將是一個龐大的if ... else if
聲明。
沒有什麼開箱即可,但你不應該需要一個巨大的'如果其他'。在授權過濾器中,您自己有請求,所以您可以從那裏獲取內容。 – Shoe 2014-09-23 15:23:15
你真的問的問題是「我可以在_this_對象上執行操作嗎?」實際上我正在做一些與此相關的搜索,但我還沒有遇到一個好的解決方案。基本上,你想[自主訪問控制](http://en.wikipedia.org/wiki/Discretionary_access_control)。維基百科描述了它,但我還沒有找到具體的編程模式。「自主訪問控制」就像是答案,但我需要更多的研究,因爲它主要關注系統資源(例如文件系統或計算機)。 – 2014-09-23 16:41:08