2012-07-02 128 views
0

我想管理我的用戶的訪問控制,並允許每個角色在網站中的不同頁面。每個用戶可能也有不同的行。asp.net中的訪問控制

我想知道什麼是處理此訪問控制的最佳方法。但是,我有這些限制。這些角色是在我正在使用的Oracle數據庫上創建的,我不想使用APP_DATA中的ASPNETDB來管理角色。

我最初的想法是爲了強化用戶的訪問並創建一個會話以表明他是管理員,用戶還是兩者。不過,我仍然需要找出如何相應地隱藏/顯示菜單項的方法。我沒有繼續這個想法,因爲我相信asp.net 4.0會爲這個用途準備好一些東西。

更新:我使用Web窗體

更新#2:我不使用一個登錄表單。我正在檢索登錄人員的Windows用戶名,並將其與數據庫中該用戶名的訪問進行比較。認證機制是手動的,只需要找出如何區分角色以及如何顯示不同的菜單。

+0

WebForms或MVC? –

+0

@Marnix Web Forms –

回答

0

你可以用的IPrincipal和IIdentity的超越的嘗試,

And use these method 

IsInRole("TestRole") 
0

您可以實現自己的自定義成員資格和角色提供者。其實並不困難。

使用谷歌搜索「實施自定義會員提供商」,你會發現許多文章解釋如何做到這一點。一,我發現相當不錯:

How do I create a custom membership provider for ASP.NET MVC 2?

後您已實現供應商和在web.config中註冊他們,你可以使用(在網絡配置授權,IsInrole在CS代碼等)的訪問控制規則的方法。

+0

我不使用MVC 2,它仍然適用? –

+0

是的。見[這個答案](http://stackoverflow.com/questions/9028897/difference-between-membership-provider-in-asp-net-webforms-and-mvc-3) – user1429080

0

有看看Forms身份驗證如何在Asp.net中工作,這與您使用的技術(webforms或mvc)以及您用於用戶的數據源(可以是sql,xml或其他)無關。 舉例來說,一旦用戶通過數據源(用戶表中存在用戶名&)對用戶進行身份驗證,您可以爲其分配IPrincipal用戶對象所需的角色並將其標記爲已通過身份驗證。然後將這些值存儲在cookie中,顯示認證機制與應用數據源的獨立性。 欲瞭解更多信息: http://www.eggheadcafe.com/tutorials/asp-net/009e2e5e-5a44-4050-8233-59a0d69844e8/basics-forms-authentication-in-aspnet-20.aspx

http://msdn.microsoft.com/en-us/library/aa480476.aspx

MembershipProvider in .NET for CAS Shibboleth

0

不使用會話來存儲這樣的信息,因爲會議和認證不同步。您可以使用Asp.Net Membership提供程序構建,也可以編寫自定義代碼來創建身份驗證Cookie。以下是身份驗證Cookie的示例。 UserModel包含附加信息(角色,用戶名),並將以安全加密的形式與身份驗證票一起存儲。

private void CreateAuthentificationTicet(UserModel user) 
{ 
    var serializedUser = JsonConvert.SerializeObject(user); 
    var ticket = new FormsAuthenticationTicket(1,    // version 
              user.Email, // user name 
              DateTime.Now, // create time 
              DateTime.Now.AddMinutes(30), // expire time 
              false,   // persistent 
              serializedUser);    // user data 

    var strEncryptedTicket = FormsAuthentication.Encrypt(ticket); 
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket); 
    Response.Cookies.Add(cookie); 
}