2011-12-30 2 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); 
      } 
     } 
    } 

편집 : 삭제하고 새 역할을 추가하는 것이 좋습니다. 하지만 제게 조언 해주세요. 업데이트 : 각 사용자는 하나의 역할 만 가질 수 있습니다. 내가 원하는 것은 라디오 버튼을 클릭하여 역할을 전환하는 방법입니다. 새 역할을 업데이트하면 이전 역할이 대체됩니다.

답변

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

아 맞습니다. 코드에서 라디오 버튼을 사용하고 있는지 분명하지 않았습니다. 어쨌든이 코드는 작업을 수행해야하지만 사용자 당 하나의 역할 정책을 적용하도록 조정할 수도 있습니다. –

관련 문제