using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Web.ViewModel.AccountVM; namespace Web.Areas.Admin.Controllers { [Authorize(Roles = "Admin")] public class RolesController : Controller { private readonly RoleManager _roleManager; public RolesController(RoleManager roleManager) { _roleManager = roleManager; } public IActionResult Index() { var roles = _roleManager.Roles.Select(r => new RoleViewModel { Id = r.Id, Name = r.Name, }).ToList(); return View(roles); } public IActionResult Create() { return View(new RoleViewModel()); } [HttpPost] [ValidateAntiForgeryToken] public async Task Create(RoleViewModel model) { if (ModelState.IsValid) { var role = new IdentityRole { Name = model.Name }; // Optionally handle the description if your IdentityRole class supports it var result = await _roleManager.CreateAsync(role); if (result.Succeeded) { TempData["Success"] = "role created successfully"; return RedirectToAction("Index"); } foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } return View(model); } public async Task Edit(string id) { var role = await _roleManager.FindByIdAsync(id); if (role == null) { return NotFound(); } var model = new RoleViewModel { Id = role.Id, Name = role.Name, }; return View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task Edit(RoleViewModel model) { if (ModelState.IsValid) { var role = await _roleManager.FindByIdAsync(model.Id); if (role == null) { return NotFound(); } role.Name = model.Name; var result = await _roleManager.UpdateAsync(role); if (result.Succeeded) { TempData["Success"] = "Role updated successfully"; return RedirectToAction(nameof(Index)); } foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } return View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task DeleteMultiple(List selectedRoles) { if (selectedRoles == null || !selectedRoles.Any()) { TempData["Error"] = "No roles selected for deletion."; return RedirectToAction(nameof(Index)); } foreach (var roleId in selectedRoles) { var role = await _roleManager.FindByIdAsync(roleId); if (role != null) { await _roleManager.DeleteAsync(role); } } TempData["Success"] = "Selected roles deleted successfully."; return RedirectToAction(nameof(Index)); } } }