Обновление роли с помощью поставщика членства в aspnet - PullRequest
0 голосов
/ 31 декабря 2011

У меня есть RadioButtonList "chklRoles", который имеет 4 кнопки.Я хочу обновить базу данных aspnet_UserInRoles, если я выберу роль.Но похоже, что у провайдера членства в Aspnet нет метода обновления.Как я могу это сделать?

 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 голосов
/ 31 декабря 2011

Вы можете использовать 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());
    }
}

Обратите внимание, что у меня не было возможности тщательно проверить этот код.

...