我試圖從符合一組標準的用戶組中保護我的MVC路由。由於MVC似乎使用了很多屬性,而Steven Sanderson在他的專業MVC書中使用了一個用於安全擴展性的特性,所以我開始沿着這條路線前進,但是我想根據我正在應用的操作定義上下文規則。將Func作爲屬性參數傳遞以保護MVC路線
有些行爲只針對員工,有些不行。
某些操作僅適用於company1,有些操作不適用。
所以我想這類型的使用...
[DisableAccess(BlockUsersWhere = u => u.Company != "Acme")]
public ActionResult AcmeOnlyAction()
{
...
}
[DisableAccess(BlockUsersWhere = u => u.IsEmployee == false)]
public ActionResult EmployeeOnlyAction()
{
...
}
看起來很乾淨,我和真的是很容易實現,但我得到以下編譯器錯誤:
「BlockUsersWhere」不是有效的命名屬性參數,因爲它不是有效的屬性參數類型
顯然,您不能使用Func作爲屬性參數。任何其他建議來解決這個問題或其他的東西,提供了我們在MVC項目中所喜愛的簡單用法。
謝謝,這是我想到的第一件事,但用這種方法,我失去了能夠在上下文基礎上創建獨特規則而無需更新屬性類。我可能會走下這條路。 – jjr2527 2010-07-29 14:42:38
是的,屬性只能傳達有限的信息量。他們應該只是關於分配元數據。更復雜的行爲屬於代碼。 – marcind 2010-07-29 18:21:09