Added role management functionality to the user details page

This commit is contained in:
Matěj Kubíček
2026-05-01 20:16:08 +02:00
parent 3480ce3613
commit 6490c42a9d
3 changed files with 53 additions and 4 deletions
@@ -8,20 +8,23 @@ namespace TemplateWeb.Areas.Admin.Controllers;
public class UsersController : AdminBaseController
{
private readonly UserManager<UserEntity> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;
public UsersController(UserManager<UserEntity> userManager)
public UsersController(UserManager<UserEntity> userManager, RoleManager<IdentityRole> roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
public async Task<IActionResult> Index()
{
var allRoles = _roleManager.Roles.Select(r => r.Name!).ToList();
var users = _userManager.Users.ToList();
var viewModels = new List<UserWithRolesViewModel>();
foreach (var user in users)
{
var roles = await _userManager.GetRolesAsync(user);
viewModels.Add(new UserWithRolesViewModel { UserEntity = user, Roles = roles });
viewModels.Add(new UserWithRolesViewModel { UserEntity = user, Roles = roles, AllRoles = allRoles });
}
return View(viewModels);
}
@@ -32,6 +35,23 @@ public class UsersController : AdminBaseController
if (user == null) return NotFound();
var roles = await _userManager.GetRolesAsync(user);
return View(new UserWithRolesViewModel { UserEntity = user, Roles = roles });
var allRoles = _roleManager.Roles.Select(r => r.Name!).ToList();
return View(new UserWithRolesViewModel { UserEntity = user, Roles = roles, AllRoles = allRoles });
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UpdateRoles(string id, List<string> selectedRoles)
{
var user = await _userManager.FindByIdAsync(id);
if (user == null) return NotFound();
var currentRoles = await _userManager.GetRolesAsync(user);
await _userManager.RemoveFromRolesAsync(user, currentRoles);
if (selectedRoles.Count > 0)
await _userManager.AddToRolesAsync(user, selectedRoles);
TempData["SuccessMessage"] = "Roles updated successfully.";
return RedirectToAction(nameof(Details), new { id });
}
}