using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Threading.Tasks; using System.Linq; namespace vita_asistente.Controllers { [Authorize(Roles = "Admin")] public class RolesController : Controller { private readonly RoleManager _roleManager; public RolesController(RoleManager roleManager) { _roleManager = roleManager; } // GET: Roles public async Task Index() { var roles = await _roleManager.Roles.ToListAsync(); return View(roles); } // GET: Roles/Create public IActionResult Create() { return View(); } // POST: Roles/Create [HttpPost] [ValidateAntiForgeryToken] public async Task Create(string roleName) { if (string.IsNullOrEmpty(roleName)) { ModelState.AddModelError("", "El nombre del rol no puede estar vacío."); return View(); } var roleExists = await _roleManager.RoleExistsAsync(roleName); if (!roleExists) { var result = await _roleManager.CreateAsync(new IdentityRole(roleName)); if (result.Succeeded) { return RedirectToAction(nameof(Index)); } foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } else { ModelState.AddModelError("", "El rol ya existe."); } return View(); } // GET: Roles/Delete/5 public async Task Delete(string id) { if (id == null) return NotFound(); var rol = await _roleManager.FindByIdAsync(id); if (rol == null) return NotFound(); return View(rol); } // POST: Roles/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public async Task DeleteConfirmed(string id) { var rol = await _roleManager.FindByIdAsync(id); if (rol != null) { await _roleManager.DeleteAsync(rol); } return RedirectToAction(nameof(Index)); } } }