SurveyVista/Web/Areas/Admin/Controllers/RolesController.cs
2024-05-04 20:19:22 +02:00

135 lines
3.7 KiB
C#

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<IdentityRole> _roleManager;
public RolesController(RoleManager<IdentityRole> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> DeleteMultiple(List<string> 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));
}
}
}