使用aspnet成员资格提供程序更新角色

时间:2011-12-30 20:29:50

标签: asp.net asp.net-membership roleprovider

我有一个RadioButtonList“chklRoles”,它有4个按钮。如果我选择一个角色,我想更新数据库aspnet_UserInRoles。但似乎Aspnet Membership Provider没有更新方法。我该怎么办?

 protected void chklRoles_SelectedIndexChanged(object sender, EventArgs e)
    {
        foreach (string role in Roles.GetRolesForUser(userName))
        {
            if (chklRoles.Items.FindByText(role).Selected == true)
            {  
                // update role;
               // Roles.DeleteRole("origin_role");
               //  Roles.AddUserToRole(userName, role);
            }
        }
    }

编辑:我认为删除它并添加新角色可能是一个选项。但请给我一个建议。 更新:每个用户只能有一个角色。我想要的是如何通过单击单选按钮切换角色。更新一个新角色将取代旧角色。

1 个答案:

答案 0 :(得分:0)

您可以使用RoleProvider添加或删除用户的角色。您必须确定要添加和/或删除的角色。这看起来像这样:

protected void chklRoles_SelectedIndexChanged(object sender, EventArgs e)
{
    var current = Roles.GetRolesForUser(userName);
    var added = new List<string>();
    var removed = new List<string>();

    // go over all the roles to build the lists 
    foreach (string role in Roles.GetAllRoles())
    {
        if (chklRoles.Items.FindByText(role).Selected && !current.Contains( role ))
        {  
            added.Add( role );
        }
        else if( current.Contains( role ) )
        {
            removed.Add( role );
        }
    }
    // apply changes if needed
    if( added.Count > 0 )
    {
       Roles.AddUsersToRoles( new[]{userName}, added.ToArray());
    }
    if( removed.Count > 0 )
    {
        Roles.RemoveUsersFromRoles(new[]{userName}, removed.ToArray());
    }
}

请注意,我没有机会彻底检查此代码。