我一直在想通過這個答案,並找不到一個好的解決方案,如何正確地做到這一點。
如何擴展/架構ASP.NET MVC 3授權屬性來處理這種情況
我已經讀了這些文章:
http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/
http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx
ASP.NET MVC custom authorization
http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute.aspx
Custom Authorize Attribute additional Param?
思想也許是最後一個接近。
場景:
- 用戶創建角色
- 用戶可以指定哪些角色可以訪問做。
- 用戶將用戶添加到這些角色
- 用戶也是部門的一部分。
所以在控制我怎麼能說一個用戶訪問一個動作,因爲我不知道什麼是用戶的管理員創建的角色?
因此,在邏輯...讓我們說我有一個任務控制器與「創建」,「細節」。該任務有一個「服裝」部門。
- 任務:
- 的TaskID
- TaskTitle
- TaskDepartmentID
- - 用戶:
- 用戶名
- 角色
- 部門
我會以某種方式關聯「創建創建任務「用行動‘查看任務詳情細節‘行動‘’能力
我將在以某種方式聯繫起來’,’能力
管理員將添加一個名爲新角色‘任務的用戶’,並說這個角色可以「創建任務」
管理員也將使這個角色「查看任務詳情」
管理員將打開「部門級安全」
創建:
當在控制器上調用任務創建時,我需要確保用戶處於允許「創建任務」的角色中。所以默認情況下,我不能發送允許進入授權屬性的「角色」,因爲我不知道它們。我莫名其妙地需要在所有的用戶角色來發送和查看某個角色先後獲得「創建任務」
與安全部查看:
當另一個用戶去查看這個任務,他們可以訪問到「查看任務細節」(我可以弄清楚,但我解決了第一個問題)。但是,由於該任務是針對另一個部門,而不是他們所在的部門,所以我需要拒絕訪問。如果任務是用戶所在部門之一的一部分,用戶只能「查看任務詳細信息」。
這是我無法弄清楚的。如何正確擴展AuthorizeAttribute,這樣我就可以通過GerRolesForUser發送一個角色列表,因爲它只接受一個字符串,以及如何識別它的作用,然後通過檢查Department ID來限制另一個級別的安全性。
部門ID不一定要緩存,所以也許我可以在控制器級別做到這一點。
我有類似的情況,你說的授權是數據庫驅動。你有沒有想出實現這個目標的好方法? – Zacho 2011-04-06 14:55:44