2012-07-02 30 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); 
}