gpt4 book ai didi

asp.net - 在没有(或有虚拟的)角色提供者的情况下启用角色

转载 作者:行者123 更新时间:2023-12-01 12:48:51 25 4
gpt4 key购买 nike

我正在关注 this article其中描述了用户使用表单例份验证登录时如何为用户分配角色:

public void Application_AuthenticateRequest( Object src , EventArgs e )
{
if (!(HttpContext.Current.User == null))
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
{
System.Web.Security.FormsIdentity id;
id = (System.Web.Security.FormsIdentity)HttpContext.Current.User.Identity;
String[] myRoles = new String[2];
myRoles[0] = "Manager";
myRoles[1] = "Admin";
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
}
}
}

我把角色逻辑放在事件处理程序中,所以我基本上不需要角色提供者。尽管如此,为了运行它,似乎我必须在 web.config 中启用 Role Provider。可悲的是,如果我只是说:

<roleManager enabled="true"/>

它会导致与 SQL 服务器连接失败相关的运行时错误,就像我选择 AspNetSqlRoleProvider 作为角色提供者一样。

我应该怎么做才能让角色以这种方式工作?我如何选择不使用角色提供程序,或者我应该如何实现虚拟角色提供程序(如果它有意义的话)?

最佳答案

您不需要在 web.config 中启用 roleManager - 毕竟,在 roleManager 出现之前,人们习惯于在 .NET 1.x 中使用角色。

roleManager 会为您做的一件您在代码中没有做的事情是将 Thread.CurrentPrincipal 设置为 HttpContext.Current.User。如果你依赖这个(例如使用 PrincipalPermissionAttribute),那么你需要添加这个:

Thread.CurrentPrincipal = HttpContext.Current.User;

否则,我希望它能起作用:您看到什么症状让您认为它不起作用?

至于实现虚拟 RoleProvider,这很简单:例如,参见 this MSDN article .

你只需要实现GetRolesForUserIsInRole方法;其他方法可以简单地抛出 NotSupportedException

关于asp.net - 在没有(或有虚拟的)角色提供者的情况下启用角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com