2011-03-25 86 views
7

不刪除用戶當我點擊「刪除」 LinkBut​​ton的,它可以在我的「JobPost.mdf」從我的「UserDetail」表中刪除所有的用戶信息,它也刪除對應的「aspnet_Users」&「aspnet_Membership」,但「UserInRole」仍包含該用戶名。即使我指定了Code:Membership.DeleteUser(UserName,true);Membership.DeleteUser(用戶名,真實)的角色

我想真正的是布爾deleteallrelated數據,但它並沒有真正刪除userInRole。因此,下次用戶註冊時使用相同的名稱,它會自動獲得「admin」角色。

這種「deleteUser」頁面我把它保護的「管理員」文件夾內。

如何解決?爲什麼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'。) – 2011-03-26 00:21:01

回答

9

UserInRole表包含兩個Guid領域。用戶名不存儲。無論何時創建新用戶,都會分配一個新的完全唯一的UserId

爲什麼你認爲用戶角色關聯不會被刪除?您可以通過執行SELECT COUNT(*) FROM aspnet_UserInRoles WHERE UserId={DeletedUserId}的查詢來準確測試。

我已經包含了ASP.NET成員SQL數據庫,供大家參考下面的模式。 enter image description here

此外,Roles API允許你手動刪除角色。因此,要刪除給定用戶的所有角色將會像下面這樣looke:

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

非常感謝!它按照你的說法工作。感謝您寶貴的時間和精彩的演講。 – jenifer 2011-03-26 00:44:07