当我点击“删除”链接按钮时,它可以从我的“JobPost.mdf”中的“UserDetail”表中删除所有用户信息,它还会删除相应的“aspnet_Users”& “aspnet_Membership”,但“UserInRole”仍包含该UserName。即使我指定了Code: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();
}
}
受保护的Admin文件夹中的我的web.config:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<authorization>
<allow roles="Administrators" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
答案 0 :(得分:9)
UserInRole
表包含两个Guid
字段。用户名未存储。每当创建新用户时,都会为他们分配一个全新的,完全唯一的UserId
。
为什么您认为用户角色关联没有被删除?您可以通过执行SELECT COUNT(*) FROM aspnet_UserInRoles WHERE UserId={DeletedUserId}
的查询来准确测试。
我在下面列出了ASP.NET成员资格SQL数据库架构供您参考。
此外,Roles
API允许您手动删除角色。因此,删除给定用户的所有角色会像:
void DeleteUserRoles(string username)
{
foreach (var role in Roles.GetRolesForUser(username))
Roles.RemoveUserFromRole(username, role);
}