Membership.DeleteUser(UserName,true)不从角色中删除用户

jen*_*fer 7 .net c# asp.net asp.net-membership

当我单击"删除"链接按钮时,它可以从我的"JobPost.mdf"中的"UserDetail"表中删除所有用户信息,它还删除相应的"aspnet_Users"和"aspnet_Membership",但"UserInRole"仍然包含那个UserName.即使我指定了代码:Membership.DeleteUser(UserName,true);

我认为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();    
     }
 }
Run Code Online (Sandbox Code Playgroud)

我在受保护的Admin文件夹中的web.config:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <system.web>
       <authorization>
            <allow roles="Administrators" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

sma*_*man 9

UserInRole表包含两个Guid字段.用户名未存储.每当创建一个新用户时,他们都会被分配一个新的,完全唯一的UserId.

为什么您认为用户角色关联没有被删除?您可以通过执行查询来准确测试SELECT COUNT(*) FROM aspnet_UserInRoles WHERE UserId={DeletedUserId}.

我在下面包含了ASP.NET成员资格SQL数据库模式供您参考. 在此输入图像描述

此外,RolesAPI允许您手动删除角色.因此,删除给定用户的所有角色会像:

void DeleteUserRoles(string username)
{
    foreach (var role in Roles.GetRolesForUser(username))
        Roles.RemoveUserFromRole(username, role);            
}
Run Code Online (Sandbox Code Playgroud)