2011-12-30 5 views
0

私は4つのボタンを持つRadioButtonList "chklRoles"を持っています。私は、役割を選択すると、データベースaspnet_UserInRolesを更新したいと思います。しかし、Aspnetメンバーシッププロバイダには更新メソッドがないようです。どうしたらいいですか?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

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()); 
    } 
} 

このコードを完全にチェックする機会はありませんでした。

+0

あなたのコードは素晴らしいです、私の更新を参照してください。 –

+0

ああ、そうです。あなたのコードから、あなたがラジオボタンを使用していることは明らかではありませんでした。いずれにしても、このコードは仕事をする必要がありますが、ユーザーごとに1つのロールポリシーを適用するよう調整することもできます。 –

関連する問題