Template
mirror of
https://github.com/egmont11/ASP.Net-Core-MVC-Template.git
synced 2026-07-24 07:09:56 +02:00
Added role management functionality to the user details page
This commit is contained in:
@@ -8,20 +8,23 @@ namespace TemplateWeb.Areas.Admin.Controllers;
|
|||||||
public class UsersController : AdminBaseController
|
public class UsersController : AdminBaseController
|
||||||
{
|
{
|
||||||
private readonly UserManager<UserEntity> _userManager;
|
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;
|
_userManager = userManager;
|
||||||
|
_roleManager = roleManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IActionResult> Index()
|
public async Task<IActionResult> Index()
|
||||||
{
|
{
|
||||||
|
var allRoles = _roleManager.Roles.Select(r => r.Name!).ToList();
|
||||||
var users = _userManager.Users.ToList();
|
var users = _userManager.Users.ToList();
|
||||||
var viewModels = new List<UserWithRolesViewModel>();
|
var viewModels = new List<UserWithRolesViewModel>();
|
||||||
foreach (var user in users)
|
foreach (var user in users)
|
||||||
{
|
{
|
||||||
var roles = await _userManager.GetRolesAsync(user);
|
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);
|
return View(viewModels);
|
||||||
}
|
}
|
||||||
@@ -32,6 +35,23 @@ public class UsersController : AdminBaseController
|
|||||||
if (user == null) return NotFound();
|
if (user == null) return NotFound();
|
||||||
|
|
||||||
var roles = await _userManager.GetRolesAsync(user);
|
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 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,12 @@
|
|||||||
<a asp-action="Index" class="btn btn-secondary">← Back to List</a>
|
<a asp-action="Index" class="btn btn-secondary">← Back to List</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card">
|
@if (TempData["SuccessMessage"] != null)
|
||||||
|
{
|
||||||
|
<div class="alert alert-success">@TempData["SuccessMessage"]</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="card mb-4">
|
||||||
<div class="card-header bg-primary text-white">
|
<div class="card-header bg-primary text-white">
|
||||||
<h3 class="card-title mb-0">User Information: @Model.UserEntity.UserName</h3>
|
<h3 class="card-title mb-0">User Information: @Model.UserEntity.UserName</h3>
|
||||||
</div>
|
</div>
|
||||||
@@ -32,3 +37,26 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">Edit Roles</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<form asp-action="UpdateRoles" asp-route-id="@Model.UserEntity.Id" method="post">
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<div class="d-flex gap-4 flex-wrap mb-3">
|
||||||
|
@foreach (var role in Model.AllRoles)
|
||||||
|
{
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox"
|
||||||
|
name="selectedRoles" value="@role" id="role_@role"
|
||||||
|
@(Model.Roles.Contains(role) ? "checked" : "") />
|
||||||
|
<label class="form-check-label" for="role_@role">@role</label>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">Save Roles</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ public class UserWithRolesViewModel
|
|||||||
{
|
{
|
||||||
public UserEntity UserEntity { get; set; } = null!;
|
public UserEntity UserEntity { get; set; } = null!;
|
||||||
public IList<string> Roles { get; set; } = [];
|
public IList<string> Roles { get; set; } = [];
|
||||||
|
public IList<string> AllRoles { get; set; } = [];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user