Documentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/proyecto-dise-o/llms.txt
Use this file to discover all available pages before exploring further.
UsuarioController proporciona la gestión completa del ciclo de vida de usuarios del sistema utilizando la infraestructura de ASP.NET Core Identity. El controller recibe UserManager<IdentityUser> y RoleManager<IdentityRole> vía inyección de dependencias, y está decorado con [Authorize(Roles = "Admin")] a nivel de clase, por lo que ninguna acción es accesible para usuarios sin rol Admin. Las operaciones de contraseña se realizan a través del flujo seguro GeneratePasswordResetTokenAsync + ResetPasswordAsync, evitando manipulación directa del hash.
GET /Usuario/Index
Lista todos los usuarios registrados en el sistema junto con su rol asignado. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
Comportamiento:
- Obtiene todos los
IdentityUsercon_userManager.Users.ToListAsync(). - Para cada usuario, llama a
GetRolesAsync(user)y toma el primer rol (FirstOrDefault). Si el usuario no tiene rol, muestra"Sin Rol". - Construye una lista de
UsuarioVMcon los camposId,EmailyRol.
View(List<UsuarioVM>).
GET /Usuario/Crear
Muestra el formulario de creación de un nuevo usuario. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
Comportamiento:
- Consulta todos los roles disponibles con
_roleManager.Roles.Select(r => r.Name).ToListAsync(). - Carga los roles en
ViewBag.RolescomoSelectListpara el control de selección en la vista.
View().
POST /Usuario/Crear
Crea un nuevoIdentityUser y le asigna el rol seleccionado.
Autorización: [Authorize(Roles = "Admin")] (heredado de clase).
ViewModel de creación de usuario.
CrearUsuarioVM:
| Campo | Tipo | Descripción |
|---|---|---|
Email | string | Email del nuevo usuario (usado también como UserName). |
Password | string | Contraseña inicial. |
ConfirmPassword | string | Confirmación de contraseña. |
Rol | string | Nombre del rol a asignar (debe existir en Identity). |
Validación del ModelState
Si el modelo no es válido, recarga
ViewBag.Roles y devuelve el formulario.Creación del usuario
Instancia
IdentityUser { UserName = model.Email, Email = model.Email } y llama a _userManager.CreateAsync(user, model.Password).Asignación de rol
Si
result.Succeeded y model.Rol no está vacío, llama a _userManager.AddToRoleAsync(user, model.Rol).RedirectToAction("Index") en éxito · View(CrearUsuarioVM) en error.
GET /Usuario/Editar/
Muestra el formulario de edición para el usuario indicado, precargado con su email y rol actual. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
GUID del
IdentityUser (campo Id de ASP.NET Identity).- Busca el usuario con
_userManager.FindByIdAsync(id). - Si no existe, establece
TempData["Error"]y redirige aIndex. - Obtiene los roles actuales con
GetRolesAsync(user)y toma el primero. - Construye
EditarUsuarioVMconId,EmailyRolprellenos. - Carga
ViewBag.RolescomoSelectList.
View(EditarUsuarioVM) · RedirectToAction("Index") si no se encuentra.
POST /Usuario/Editar
Actualiza el email, el rol y opcionalmente la contraseña del usuario. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
ViewModel de edición de usuario.
EditarUsuarioVM:
| Campo | Tipo | Descripción |
|---|---|---|
Id | string | GUID del usuario a editar. |
Email | string | Nuevo email (también actualiza UserName). |
Password | string? | Nueva contraseña (opcional). Si está vacío, no se cambia. |
ConfirmPassword | string? | Confirmación de la nueva contraseña (opcional). |
Rol | string | Nuevo rol a asignar. |
Actualización de email y UserName
Asigna
user.Email = model.Email y user.UserName = model.Email, luego llama a _userManager.UpdateAsync(user).Actualización de rol
Compara
currentRoles.FirstOrDefault() con model.Rol. Si difieren, llama a RemoveFromRolesAsync para quitar todos los roles actuales y luego AddToRoleAsync para asignar el nuevo.La contraseña se actualiza mediante el flujo oficial de Identity (
GeneratePasswordResetTokenAsync + ResetPasswordAsync), lo que garantiza que se apliquen todas las validaciones de política de contraseñas configuradas en Program.cs.RedirectToAction("Index") en éxito · View(EditarUsuarioVM) en error.
POST /Usuario/Eliminar
Elimina permanentemente un usuario del sistema. Autorización:[Authorize(Roles = "Admin")] (heredado de clase).
GUID del
IdentityUser a eliminar.- Busca el usuario con
FindByIdAsync(id). Si no existe, estableceTempData["Error"]y redirige. - Si pasa la guarda de auto-eliminación, llama a
_userManager.DeleteAsync(user). - En éxito establece
TempData["Mensaje"]; en error estableceTempData["Error"].
RedirectToAction("Index") en todos los casos.