Update Patch AccountController in API
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 3m3s
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 3m3s
This commit is contained in:
parent
33b52a84df
commit
366bc0c0d3
@ -2,6 +2,7 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using phronCare.API.Models.Account;
|
||||
using phronCare.API.Models.Security; // Importá donde tengas ApplicationUser
|
||||
|
||||
namespace phronCare.API.Controllers
|
||||
{
|
||||
@ -11,69 +12,41 @@ namespace phronCare.API.Controllers
|
||||
public class AccountController : ControllerBase
|
||||
{
|
||||
private readonly RoleManager<IdentityRole> _roleManager;
|
||||
private readonly UserManager<IdentityUser> _userManager;
|
||||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
|
||||
public AccountController(RoleManager<IdentityRole> roleManager, UserManager<IdentityUser> userManager)
|
||||
public AccountController(RoleManager<IdentityRole> roleManager, UserManager<ApplicationUser> userManager)
|
||||
{
|
||||
_roleManager = roleManager;
|
||||
_userManager = userManager;
|
||||
}
|
||||
|
||||
// Endpoint para obtener todos los roles
|
||||
[HttpGet("GetAllRoles")]
|
||||
public IActionResult GetAllRoles()
|
||||
{
|
||||
var roles = _roleManager.Roles.ToList();
|
||||
return Ok(roles);
|
||||
}
|
||||
|
||||
[HttpGet("GetRoleById/{id}")]
|
||||
public IActionResult GetRoleById(string id)
|
||||
{
|
||||
var role = _roleManager.Roles
|
||||
.Where(_ => _.Id == id.TrimStart('{').TrimEnd('}'))
|
||||
.FirstOrDefault();
|
||||
var role = _roleManager.Roles.FirstOrDefault(r => r.Id == id.TrimStart('{').TrimEnd('}'));
|
||||
return Ok(role);
|
||||
}
|
||||
[HttpPut("UpdateRole/{id}")]
|
||||
public async Task<IActionResult> UpdateRole(string id, Role model)
|
||||
{
|
||||
var role = await _roleManager.FindByIdAsync(id);
|
||||
if (role == null)
|
||||
{
|
||||
return NotFound("Rol no encontrado");
|
||||
}
|
||||
|
||||
// Actualizar propiedades del rol
|
||||
role.Name = model.Name;
|
||||
role.NormalizedName = model.NormalizedName;
|
||||
|
||||
// Actualizar el rol en la base de datos
|
||||
var result = await _roleManager.UpdateAsync(role);
|
||||
|
||||
if (result.Succeeded)
|
||||
{
|
||||
return Ok("Rol actualizado exitosamente");
|
||||
}
|
||||
else
|
||||
{
|
||||
return BadRequest("Error al actualizar el rol");
|
||||
}
|
||||
}
|
||||
[HttpPost("CreateRole")]
|
||||
public async Task<IActionResult> CreateRole(Role model)
|
||||
{
|
||||
// Verifica si el rol ya existe
|
||||
var existingRole = await _roleManager.FindByNameAsync(model.Name);
|
||||
if (existingRole != null)
|
||||
{
|
||||
return BadRequest("El rol ya existe.");
|
||||
}
|
||||
|
||||
// Crea un nuevo rol
|
||||
var newRole = new IdentityRole
|
||||
{
|
||||
Name = model.Name,
|
||||
NormalizedName = model.Name.ToUpper(), // Normaliza el nombre, generalmente a mayúsculas
|
||||
NormalizedName = model.Name.ToUpper(),
|
||||
ConcurrencyStamp = Guid.NewGuid().ToString()
|
||||
};
|
||||
|
||||
@ -85,30 +58,51 @@ namespace phronCare.API.Controllers
|
||||
}
|
||||
else
|
||||
{
|
||||
// Manejar errores en la creación del rol
|
||||
var errors = result.Errors.Select(e => e.Description);
|
||||
return BadRequest("Error al crear el rol: " + string.Join(", ", errors));
|
||||
return BadRequest($"Error al crear el rol: {string.Join(", ", errors)}");
|
||||
}
|
||||
}
|
||||
// Endpoint para eliminar un rol
|
||||
[HttpDelete("DeleteRole/{roleId}")]
|
||||
public IActionResult DeleteRole(string roleId)
|
||||
|
||||
[HttpPut("UpdateRole/{id}")]
|
||||
public async Task<IActionResult> UpdateRole(string id, Role model)
|
||||
{
|
||||
// Verifica si el rol existe
|
||||
var existingRole = _roleManager.FindByIdAsync(roleId).Result;
|
||||
var role = await _roleManager.FindByIdAsync(id);
|
||||
if (role == null)
|
||||
{
|
||||
return NotFound("Rol no encontrado");
|
||||
}
|
||||
|
||||
role.Name = model.Name;
|
||||
role.NormalizedName = model.NormalizedName;
|
||||
|
||||
var result = await _roleManager.UpdateAsync(role);
|
||||
|
||||
if (result.Succeeded)
|
||||
{
|
||||
return Ok("Rol actualizado exitosamente");
|
||||
}
|
||||
else
|
||||
{
|
||||
return BadRequest("Error al actualizar el rol");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpDelete("DeleteRole/{roleId}")]
|
||||
public async Task<IActionResult> DeleteRole(string roleId)
|
||||
{
|
||||
var existingRole = await _roleManager.FindByIdAsync(roleId);
|
||||
if (existingRole == null)
|
||||
{
|
||||
return NotFound("El rol no se encontró.");
|
||||
}
|
||||
|
||||
// Evita la eliminación del rol "Admin"
|
||||
if (existingRole.Name.ToLower() == "admin")
|
||||
{
|
||||
return BadRequest("No se puede eliminar el rol 'Admin'.");
|
||||
}
|
||||
|
||||
// Realiza la eliminación del rol en la base de datos
|
||||
var result = _roleManager.DeleteAsync(existingRole).Result;
|
||||
var result = await _roleManager.DeleteAsync(existingRole);
|
||||
|
||||
if (result.Succeeded)
|
||||
{
|
||||
return Ok("El rol se eliminó exitosamente.");
|
||||
@ -118,43 +112,42 @@ namespace phronCare.API.Controllers
|
||||
return BadRequest("Error al eliminar el rol.");
|
||||
}
|
||||
}
|
||||
// Endpoint para obtener todos los usuarios
|
||||
|
||||
[HttpGet("GetAllUsers")]
|
||||
public IActionResult GetAllUsers()
|
||||
{
|
||||
var users = _userManager.Users.ToList();
|
||||
return Ok(users);
|
||||
}
|
||||
|
||||
[HttpGet("GetUserById/{id}")]
|
||||
public IActionResult GetUserById(string id)
|
||||
{
|
||||
var user = _userManager.Users
|
||||
.Where(_ => _.Id == id.TrimStart('{').TrimEnd('}'))
|
||||
.FirstOrDefault();
|
||||
var user = _userManager.Users.FirstOrDefault(u => u.Id == id.TrimStart('{').TrimEnd('}'));
|
||||
return Ok(user);
|
||||
}
|
||||
|
||||
[HttpPut("UpdateUser/{id}")]
|
||||
public async Task<IActionResult> UpdateUser(string id, UserUpdate? model)
|
||||
public async Task<IActionResult> UpdateUser(string id, UserUpdate model)
|
||||
{
|
||||
var user = await _userManager.FindByIdAsync(id);
|
||||
if (user == null)
|
||||
{
|
||||
return NotFound("Usuario no encontrado");
|
||||
}
|
||||
// Actualizar propiedades del rol
|
||||
|
||||
user.UserName = model.UserName;
|
||||
user.NormalizedUserName = model.UserName.ToLower();
|
||||
user.NormalizedUserName = model.UserName.ToUpper();
|
||||
user.Email = model.Email;
|
||||
user.NormalizedEmail = model.Email.ToLower();
|
||||
user.NormalizedEmail = model.Email.ToUpper();
|
||||
user.TwoFactorEnabled = model.TwoFactorEnabled;
|
||||
user.LockoutEnabled = model.LockoutEnabled;
|
||||
|
||||
// Actualizar el usuario en la base de datos
|
||||
var result = await _userManager.UpdateAsync(user);
|
||||
|
||||
if (result.Succeeded)
|
||||
{
|
||||
return Ok("usuario actualizado exitosamente");
|
||||
return Ok("Usuario actualizado exitosamente");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -162,25 +155,22 @@ namespace phronCare.API.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
// Endpoint para eliminar un usuario
|
||||
[HttpDelete("DeleteUser/{userId}")]
|
||||
public IActionResult DeleteUser(string UserId)
|
||||
public async Task<IActionResult> DeleteUser(string userId)
|
||||
{
|
||||
// Verifica si el usuario existe
|
||||
var existingUser = _userManager.FindByIdAsync(UserId).Result;
|
||||
var existingUser = await _userManager.FindByIdAsync(userId);
|
||||
if (existingUser == null)
|
||||
{
|
||||
return NotFound("El usuario no se encontró.");
|
||||
}
|
||||
|
||||
// Evita la eliminación del usuario "SuperAdmin"
|
||||
if (existingUser.UserName.ToLower() == "superdmin")
|
||||
if (existingUser.UserName.ToLower() == "superadmin")
|
||||
{
|
||||
return BadRequest("No se puede eliminar el usuario 'SuperAdmin'.");
|
||||
}
|
||||
|
||||
// Realiza la eliminación del rol en la base de datos
|
||||
var result = _userManager.DeleteAsync(existingUser).Result;
|
||||
var result = await _userManager.DeleteAsync(existingUser);
|
||||
|
||||
if (result.Succeeded)
|
||||
{
|
||||
return Ok("El usuario se eliminó exitosamente.");
|
||||
|
||||
@ -156,15 +156,16 @@ builder.Services.AddCors(options =>
|
||||
/*
|
||||
Version para despliegue
|
||||
*/
|
||||
policy
|
||||
.WithOrigins("http://dev.biodec.saludlab.com.ar", "http://phroncareUI:80", "http://192.168.10.110:9002")
|
||||
.AllowAnyMethod()
|
||||
.AllowAnyHeader()
|
||||
.AllowCredentials();
|
||||
// policy
|
||||
// .WithOrigins("http://dev.biodec.saludlab.com.ar", "http://phroncareUI:80", "http://192.168.10.110:9002")
|
||||
// .AllowAnyMethod()
|
||||
// .AllowAnyHeader()
|
||||
// .AllowCredentials();
|
||||
|
||||
/*
|
||||
Version para desarrollo
|
||||
*/
|
||||
//policy.WithOrigins("*").AllowAnyHeader().AllowAnyMethod();
|
||||
policy.WithOrigins("*").AllowAnyHeader().AllowAnyMethod();
|
||||
});
|
||||
});
|
||||
#endregion
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
"Order": 0,
|
||||
"Parameters": [
|
||||
{
|
||||
"Name": "UserId",
|
||||
"Name": "userId",
|
||||
"Type": "System.String",
|
||||
"IsRequired": true
|
||||
}
|
||||
@ -136,7 +136,7 @@
|
||||
{
|
||||
"Name": "model",
|
||||
"Type": "phronCare.API.Models.Account.UserUpdate",
|
||||
"IsRequired": false
|
||||
"IsRequired": true
|
||||
}
|
||||
],
|
||||
"ReturnTypes": []
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user