向asp.net角色提供程序动态添加角色

向asp.net角色提供程序动态添加角色,asp.net,roleprovider,isinrole,Asp.net,Roleprovider,Isinrole,我正在使用包含一些角色的Asp.Net角色提供程序。我想添加一些来自另一个数据库的其他角色。有没有一种方法可以在来自角色提供者的角色和来自我的另一个数据库的角色之间进行某种形式的“联合” 更准确地说,我使用的是表单身份验证,我从其他数据库中检索角色,并将它们存储在FormsAuthenticationTicket中。然后在来自Global.Asax的AuthenticateRequest中,我使用角色列表生成主体。但稍后使用User.IsInRole时,它不适用于我在AuthenticateRe

我正在使用包含一些角色的Asp.Net角色提供程序。我想添加一些来自另一个数据库的其他角色。有没有一种方法可以在来自角色提供者的角色和来自我的另一个数据库的角色之间进行某种形式的“联合”

更准确地说,我使用的是表单身份验证,我从其他数据库中检索角色,并将它们存储在FormsAuthenticationTicket中。然后在来自Global.Asax的AuthenticateRequest中,我使用角色列表生成主体。但稍后使用User.IsInRole时,它不适用于我在AuthenticateRequest中分配的角色列表。正确的方向是什么


Christian

您可以在运行时创建角色:

Dim strNewRole as String = "NEW"

If Not Roles.RoleExists(strNewRole) Then
    Roles.CreateRole(strNewRole)
End If

因此,您仍然可以使用代码从另一个数据库检索角色,然后对每个角色使用上述代码。

或者您必须a)覆盖自定义角色提供程序(IPrincipal)中的GetRolesForUser方法(IsInRole使用的方法)以改为使用主角色表,或者b)丑陋:保持这两个表同步,或者c)使用不同的自定义方法来替换您对IsInRole的使用(也相当难看)。下面的答案是b的一个变体。我最后做的是将外部数据库中的角色存储在HttpContext.Current.Items中,同时让RoleProvider从它的侧面完成它的工作。这使得角色检查有点棘手,但对我来说这只是一个丑陋的快速胜利。谢谢大家的帮助。