0

我想管理我的用户的访问控制,并允许每个角色在网站中使用不同的页面。每个用户,也可能有不同的行。

我想知道处理此访问控制的最佳方法是什么。但是,我有这些限制。这些角色是在我正在使用的 Oracle 数据库上创建的,我不会使用 APP_DATA 中的 ASPNETDB 来管理角色。

我最初的想法是验证用户的访问权限并创建一个会话来说明他是管理员、用户还是两者兼而有之。但是,我仍然需要想办法相应地隐藏/显示菜单项。我没有继续这个想法,因为我相信 asp.NET 4.0 会为这个用途准备好一些东西。

更新:我正在使用 Web 表单

更新#2:我没有使用登录表单。我正在检索登录人的 Windows 用户名,并将其与数据库中该用户名的访问权限进行比较。认证机制是手动的,只需要弄清楚如何区分角色以及如何显示不同的菜单。

4

5 回答 5

0

您是否考虑过使用 Oracle Provider 作为会员和角色

查看 http://docs.oracle.com/html/E10928_01/IntroInstallation.htm http://www.oracle.com/technetwork/topics/dotnet/index-087367.html

于 2012-07-02T10:41:36.403 回答
0

您可以尝试覆盖 IPrincipal 和 IIdentity,

And use these method 

IsInRole("TestRole")
于 2012-07-02T10:06:21.593 回答
0

您可以实现自己的自定义成员资格和角色提供程序。其实没那么难。

使用 Google 搜索“实现自定义会员提供程序”,您会发现很多文章解释了如何做到这一点。我发现一个很好的:

如何为 ASP.NET MVC 2 创建自定义成员资格提供程序?

在实现提供程序并在 web.config 中注册它们之后,您可以使用常规方法进行访问控制(web config 中的授权,cs 代码中的 IsInrole 等)。

于 2012-07-02T10:33:09.557 回答
0

看看 Forms 身份验证如何在 Asp.net 中工作,这与您使用的技术(webforms 或 mvc)以及您为用户使用的数据源(可以是 sql、xml 或其他)无关。例如,一旦您的用户通过您的数据源进行身份验证(例如:用户表中存在用户名和密码),您就可以为 IPrincipal User 对象分配您想要的角色并将其标记为经过身份验证。然后将这些值存储在 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

.NET 中用于 CAS Shibboleth 的 MembershipProvider

于 2012-07-02T10:55:11.617 回答
0

不要使用 session 来存储此类信息,因为 session 和身份验证不同步。您可以在 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);
}
于 2012-07-02T11:45:55.330 回答