2011-03-25 10 views
7

Cuando hago clic en el botón "eliminar", puede eliminar toda la información de usuario de mi tabla "UserDetail" en mi "JobPost.mdf", también elimina la "aspnet_Users" correspondiente & "aspnet_Membership", pero el "UserInRole" todavía contiene ese nombre de usuario. Aunque especifiqué el Código: Membership.DeleteUser (UserName, true);Membership.DeleteUser (UserName, true) no quita usuario de la función

Creo que es verdad para los datos relacionados con bool deleteall, pero realmente no elimina el userInRole. Así que la próxima vez que el usuario se registre con el mismo nombre, automáticamente obtendrá el rol de "administrador".

Esta página "deleteUser" la guardo dentro de una carpeta "admin" protegida.

¿Cómo resolverlo? ¿Por qué Membership.DeleteUser (UserName, true) no elimina 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();  
    } 
} 

Mi web.config dentro de la carpeta de administración protegida:

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

Parece una mezcla de tablas personalizadas y tablas 'SqlMembershipProvider'. ¿Exactamente a qué se refiere 'UserInRole'? (Todavía contiene el 'Nombre de usuario'). –

Respuesta

9

La tabla contiene dos UserInRoleGuid campos. El nombre de usuario no está almacenado. Cada vez que se crea un nuevo usuario, se le asigna un nuevo y completamente único UserId.

¿Por qué crees que la asociación de roles de usuario no se está eliminando? Puede probar esto con precisión realizando una consulta para el SELECT COUNT(*) FROM aspnet_UserInRoles WHERE UserId={DeletedUserId}.

He incluido el esquema de la base de datos SQL de membresía ASP.NET a continuación para su referencia. enter image description here

Además, la API Roles le permite eliminar roles manualmente. Por lo tanto, para eliminar todas las funciones de un usuario determinado, tendría el siguiente aspecto:

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

¡Muchas gracias! Funciona como lo que dices. Gracias por su valioso tiempo y excelente presentación. – jenifer

Cuestiones relacionadas