public IActionResult EditUser(string userId) { var user = _dataAccess.GetUser(userId); var tenantId = user.GetTenantId(); var viewModel = new EditUserViewModel() { UserId = userId, UserName = user.UserName, AssociatedSkills = user.AssociatedSkills, IsTenantAdmin = user.IsTenantAdmin(), Tenant = tenantId != null ? _dataAccess.GetTenant(tenantId.Value) : null }; return View(viewModel).WithSkills(_dataAccess); }
public async Task<IActionResult> EditUser(EditUserViewModel viewModel) { if (!ModelState.IsValid) { return View(viewModel).WithSkills(_dataAccess); } //Skill associations var user = _dataAccess.GetUser(viewModel.UserId); user.AssociatedSkills.RemoveAll(usk => viewModel.AssociatedSkills == null || !viewModel.AssociatedSkills.Any(msk => msk.SkillId == usk.SkillId)); if (viewModel.AssociatedSkills != null) { user.AssociatedSkills.AddRange(viewModel.AssociatedSkills.Where(msk => !user.AssociatedSkills.Any(usk => usk.SkillId == msk.SkillId))); } if (user.AssociatedSkills != null && user.AssociatedSkills.Count > 0) { user.AssociatedSkills.ForEach(usk => usk.UserId = user.Id); } await _dataAccess.UpdateUser(user); var tenantAdminClaim = new Claim(Security.ClaimTypes.UserType, "TenantAdmin"); if (viewModel.IsTenantAdmin) { //add tenant admin claim var result = await _userManager.AddClaimAsync(user, tenantAdminClaim); if (result.Succeeded) { var callbackUrl = Url.Action("Login", "Admin", new { Email = user.Email }, protocol: HttpContext.Request.Scheme); await _emailSender.SendEmailAsync(user.Email, "Account Approval", "Your account has been approved by an administrator. Please <a href=" + callbackUrl + ">Click here to Log in</a>"); } else { return Redirect("Error"); } } else if (user.IsTenantAdmin()) { //remove tenant admin claim var result = await _userManager.RemoveClaimAsync(user, tenantAdminClaim); if (!result.Succeeded) { return Redirect("Error"); } } return RedirectToAction(nameof(Index)); }