2010-03-25 108 views
0

我想找到一個好的模式用於用戶訪問驗證。asp.net mvc應用程序的網站安全/訪問管理

基本上在webforms應用程序中,我有一個框架,它使用用戶角色來定義訪問,即用戶被分配到角色,並且「頁面」被授予訪問頁面的權限。我在數據庫中有一個表格,其中列出了所有的頁面。頁面可以具有從父級繼承其訪問權限的子頁面。

定義訪問權限時,我將角色訪問權限分配給頁面。角色中的用戶可以訪問這些頁面。管理也相當簡單。我實現這個的方式是在每個頁面都繼承的基類上。在pageload/init中,我會檢查頁面url並驗證訪問權限並採取適當的行動。

但是我現在正在研究一個MVC應用程序,並且需要實現類似的東西,但是我找不到讓我以前的解決方案工作的好方法。純粹是因爲我沒有靜態頁面作爲url路徑。此外,我不知道如何最好地解決這個問題,因爲我現在有控制器,而不是aspx頁面。

我已經看了MVCSitemapprovider,但是這不起作用的數據庫,它需要一個站點地圖文件。我需要控制更改用戶執行時間。

任何想法/建議/指針將不勝感激。

回答

0

你的技術很容易地創建自己的ActionFilter完成: http://msdn.microsoft.com/en-us/library/dd410056.aspx

然後,您可以將此屬性應用於控制器或操作方法,並非常容易地實現您自己的頁面安全性。

public class MinmalSecurity : ActionFilterAttribute 
{ 
    private string _roles; 
    public MinmalSecurity(string roles) 
    { 
     _roles = roles; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //go to database,find permissions, redirect or proceed as nescessary 

     base.OnActionExecuting(filterContext); 
    } 
} 
+0

謝謝,我今天遇到了這個,並確實認爲它可以提供幫助。絕對是我會進一步探索的。 – minalg 2010-03-26 08:58:53

1

當您創建一個MVC應用程序,而不是空白網站時,會包含一個基本的ASP.NET成員資格提供程序。這將做你正在尋找的一切,幾乎沒有編碼。

這裏是MSDN:http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

這裏是一個CodePlex項目,它擴展了功能比建於更多:http://mvcmembership.codeplex.com/

+0

謝謝,但它不能讓我動態訪問/拒絕更低級別的權限,如控制器內的操作。除非我沒有正確理解它。 – minalg 2010-03-26 09:00:04