启用角色但不需要(或使用虚拟的)角色提供程序

3

我正在遵循这篇文章,其中描述了如何在使用表单身份验证时为用户分配角色:

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中启用角色提供程序。不幸的是,如果我只是简单地添加:

<roleManager enabled="true"/>

如果我选择AspNetSqlRoleProvider作为角色提供程序,那么它会导致与SQL服务器连接失败相关的运行时错误。

我应该怎么做才能使角色正常工作?我如何选择不使用角色提供程序,或者如果有必要的话,应该如何实现虚拟角色提供程序?


代码在我看来没问题。我不认为你需要启用角色管理器来完成这个操作。如果您没有在web.config中启用角色提供程序,会发生什么? - Andrew Stephens
1个回答

2

在web.config中不需要启用roleManager,毕竟在出现roleManager之前,人们就已经使用.NET 1.x中的角色了。

roleManager可以为您提供一个优点,即在您的代码中未执行的操作是将Thread.CurrentPrincipal设置为HttpContext.Current.User。如果你依赖这一点(例如使用PrincipalPermissionAttribute),那么你需要添加以下内容:

Thread.CurrentPrincipal = HttpContext.Current.User;

否则,我期望它能够正常工作:你看到了什么症状让你认为它没有工作?
至于实现一个虚拟的RoleProvider,这很容易:例如,请参见这篇MSDN文章
你只需要实现GetRolesForUserIsInRole方法;其他方法可以简单地抛出NotSupportedException

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接