2010-03-08 152 views
0

當前我使用[Authorize(Roles =「.....」)]來保護我的控制器動作在我的ASP.NET MVC 1應用程序上,並且工作正常。但是,某些搜索視圖需要具有按鈕,這些按鈕會根據搜索列表中選定的記錄啓用/禁用需要啓用/禁用的這些操作,並且還需要登錄用戶的安全權限。ASP.NET MVC - 擴展授權屬性

因此,我認爲我需要有一個類訪問數據庫表,這些數據庫通過應用程序角色交叉引用這些目標控制器/操作來確定這些按鈕的狀態。顯然,這會使事情變得混亂,因爲priv需要在兩個地方保留 - 在該類/數據庫表中以及控制器操作上(另外,如果我想更改對操作的訪問權限,我將不得不更改代碼和編譯,而不僅僅是更改數據庫表項)。

理想情況下,我想擴展[Authorize]功能,以便不必在[Authorize]代碼中指定角色,而是根據用戶,控制器和操作查詢安全類,然後返回布爾值允許或拒絕訪問。有沒有關於這方面的好文章 - 我無法想象這是一件不尋常的事情,但我似乎正在努力尋找如何做到這一點的任何事情(可能是週一早上的大腦)。我已經開始執行一些代碼,看文章http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/,它似乎開始關閉,但我無法找到「正確」的方式從httpContext獲取調用控制器和操作值 - 我可能會欺騙一點點的代碼從請求url中提取它們,但這對我來說並不合適,我寧願正確地做。

乾杯

MH

回答

0

我發現這在另一個論壇,因此將它張貼在這裏的情況下,任何人發現它是有用的。請注意,您是如何做到這一點取決於您是否使用MVC 1或2

創建類需求的變化來實現

public void OnAuthorization(AuthorizationContext filterContext) 

,然後你可以使用

string controllerName = filterContext.RouteData.Values["controller"].ToString(); 

和相同,用「action」代替「controller」(確保你先檢查這些值中的空值)。在MVC 2中,這可以更改爲filterContext.ActionDescriptor.ActionName和.ActionDescriptor.ControllerDescriptor.ControllerName,您將不必檢查空值