auto compile and identity management

This commit is contained in:
Elias Jansson
2025-05-06 19:27:13 +02:00
parent a140a59f66
commit 365b650fb9
87 changed files with 5219 additions and 24 deletions

View File

@@ -0,0 +1,79 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Aberwyn.Models;
namespace Aberwyn.Controllers
{
[Authorize(Roles = "Admin")]
public class AdminController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;
public AdminController(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
public async Task<IActionResult> Index()
{
var users = _userManager.Users.ToList();
var model = new List<AdminUserViewModel>();
foreach (var user in users)
{
var roles = await _userManager.GetRolesAsync(user);
model.Add(new AdminUserViewModel
{
UserId = user.Id,
Email = user.Email,
Roles = roles.ToList()
});
}
var allRoles = _roleManager.Roles.Select(r => r.Name).ToList();
ViewBag.AllRoles = allRoles;
return View(model);
}
[HttpPost]
public async Task<IActionResult> AddToRole(string userId, string role)
{
var user = await _userManager.FindByIdAsync(userId);
if (user != null && await _roleManager.RoleExistsAsync(role))
{
await _userManager.AddToRoleAsync(user, role);
}
return RedirectToAction("Index");
}
[HttpPost]
public async Task<IActionResult> RemoveFromRole(string userId, string role)
{
var user = await _userManager.FindByIdAsync(userId);
if (user != null && await _userManager.IsInRoleAsync(user, role))
{
await _userManager.RemoveFromRoleAsync(user, role);
}
return RedirectToAction("Index");
}
[HttpPost]
public async Task<IActionResult> CreateRole(string roleName)
{
if (!string.IsNullOrWhiteSpace(roleName) && !await _roleManager.RoleExistsAsync(roleName))
{
await _roleManager.CreateAsync(new IdentityRole(roleName));
}
return RedirectToAction("Index");
}
}
public class AdminUserViewModel
{
public string UserId { get; set; }
public string Email { get; set; }
public List<string> Roles { get; set; }
}
}