135 lines
3.7 KiB
C#
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
|
|
{
|
|
|
|
|
|
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));
|
|
}
|
|
|
|
}
|
|
}
|