2011-03-25 4 views
7

"삭제"링크를 클릭하면 내 "JobPost.mdf"의 "UserDetail"테이블에서 모든 사용자 정보를 삭제할 수 있습니다. 해당 "aspnet_Users"& "aspnet_Membership"해당 "UserInRole"여전히 해당 UserName 포함되어 있습니다. 코드를 지정 했더라도 : Membership.DeleteUser (UserName, true);Membership.DeleteUser (UserName, true) 사용자를 역할에서 제외하지 않습니다.

사실 나는 bool deleteallrelated 데이터에 대해 생각했지만 실제로는 userInRole을 삭제하지 않습니다. 다음에 사용자가 같은 이름으로 등록하면 자동으로 "admin"역할을 자동으로 얻게됩니다.

이 "deleteUser"페이지 나는 보호 된 "admin"폴더 안에 보관합니다.

어떻게 해결할 수 있습니까? 왜 Membership.DeleteUser (UserName, true)는 UserInRole을 삭제하지 않습니까? 보호 관리자 폴더 안에

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Delete") 
    { 
     string UserName = e.CommandArgument.ToString(); 
     Membership.DeleteUser(UserName, true); 
     JobPostDataContext db = new JobPostDataContext(); 
     var query = from u in db.UserDetails 
        where u.UserName == UserName 
        select u; 
     foreach (var item in query) 
     { 
      db.UserDetails.DeleteOnSubmit(item); 
     } 
     db.SubmitChanges(); 

     FormsAuthentication.SignOut();  
    } 
} 

내 Web.config의는 :

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    <system.web> 
     <authorization> 
      <allow roles="Administrators" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</configuration> 
+0

이것은 사용자 정의 테이블과'SqlMembershipProvider' 테이블이 혼합되어있는 것처럼 보입니다. 정확히 당신이 참조하고있는'UserInRole'은 무엇입니까? (여전히'UserName'을 포함하고 있습니다.) –

답변

9

UserInRole 표는 두 Guid 필드가 포함되어 있습니다. 사용자 이름은 저장되지 않습니다. 새로운 사용자가 생성 될 때마다 그들은 완전히 새로운 유일한 UserId으로 지정됩니다.

사용자 역할 연관성이 삭제되지 않는 이유는 무엇이라고 생각하십니까? SELECT COUNT(*) FROM aspnet_UserInRoles WHERE UserId={DeletedUserId}에 대한 쿼리를 수행하여이를 정확하게 테스트 할 수 있습니다.

참조 용 ASP.NET 멤버 자격 SQL 데이터베이스 스키마가 아래에 포함되어 있습니다. enter image description here

또한 Roles API를 사용하면 수동으로 역할을 삭제할 수 있습니다. 따라서 주어진 사용자에 대한 모든 역할을 삭제하려면 다음과 같이하십시오 :

void DeleteUserRoles(string username) 
{ 
    foreach (var role in Roles.GetRolesForUser(username)) 
     Roles.RemoveUserFromRole(username, role);    
} 
+1

대단히 고마워요! 그것은 당신이 말하는대로 작동합니다. 귀중한 시간과 훌륭한 프리젠 테이션에 감사드립니다. – jenifer

관련 문제