private async Task PopulateViewModel(ManageUserDetailsViewModel model, string id) { var user = await _userManager.FindByIdAsync(id); if (user == null) { throw new KeyNotFoundException(); } else { model.User = user; } model.RecentEvents = await _userRepository.GetPlaytimeEventsByUserIDSinceDateAsync(model.User.Id, model.SearchCutoff); var isModerator = await _userManager.IsInRoleAsync(model.User, "Moderator"); var isAdmin = await _userManager.IsInRoleAsync(model.User, "Admin"); model.UserRole = 0; if (isModerator) { model.UserRole = 1; } else if (isAdmin) { model.UserRole = 2; } }
public async Task <IActionResult> ManageUserDetails([FromForm] ManageUserDetailsViewModel model) { var newRole = model.UserRole; var newIsActive = model.User.IsActive; try { await PopulateViewModel(model, model.User.Id); } catch (KeyNotFoundException) { return(NotFound()); } if (newRole != model.UserRole) { var newRoleString = model.UserRoles[newRole].Text; var oldRoleString = model.UserRoles[model.UserRole].Text; var wasInRole = await _userManager.IsInRoleAsync(model.User, newRoleString); // Can't remove last admin... safety first... if (oldRoleString == "Admin") { var remainingAdmins = await _userManager.GetUsersInRoleAsync("Admin"); if (remainingAdmins.Count == 1 && remainingAdmins.Single().Id == model.User.Id) { ViewBag.Status = "ERROR: Cannot remove the last admin!"; return(View(model)); } } await _userManager.RemoveFromRolesAsync(model.User, new string[] { "Admin", "Moderator" }); if (!wasInRole && newRole > 0) { await _userManager.AddToRoleAsync(model.User, newRoleString); } } model.User.IsActive = newIsActive; await _userManager.UpdateAsync(model.User); model.UserRole = newRole; ViewBag.Status = "User Updated!"; return(View(model)); }
public async Task <IActionResult> ManageUserDetails(string id) { var model = new ManageUserDetailsViewModel { UserRole = 0, SearchCutoff = DateTime.UtcNow.AddDays(-21) }; try { await PopulateViewModel(model, id); } catch (KeyNotFoundException) { return(NotFound()); } return(View(model)); }