public async Task <IActionResult> Edit(WorkerWithRole workerWithRole) { if (ModelState.IsValid) { try { var worker = await _userManager.FindByIdAsync(workerWithRole.Worker.Id.ToString()); if (worker != null) { worker.UserName = workerWithRole.Worker.UserName; worker.Name = workerWithRole.Worker.Name; worker.Department = workerWithRole.Worker.Department; worker.IsStaff = workerWithRole.Worker.IsStaff; var result = await _userManager.UpdateAsync(worker); if (result.Succeeded) { if (workerWithRole.NewPassword != null) // change password { result = await _userManager.RemovePasswordAsync(worker); if (result.Succeeded) { await _userManager.AddPasswordAsync(worker, workerWithRole.NewPassword); } } // change roles var existRoles = await _userManager.GetRolesAsync(workerWithRole.Worker); var existRolesHS = new HashSet <string>(existRoles); var changedRolesHS = new HashSet <string>(workerWithRole.Roles); foreach (var role in _context.Roles.Select(r => r.Name).ToList()) { if (changedRolesHS.Contains(role)) { if (!existRolesHS.Contains(role)) { await _userManager.AddToRoleAsync(worker, role); } } else { if (existRolesHS.Contains(role)) { await _userManager.RemoveFromRoleAsync(worker, role); } } } } } } catch (DbUpdateConcurrencyException) { throw; } } return(RedirectToAction("Index")); }
public async Task <IActionResult> Add(WorkerWithRole workerWithRole) { if (ModelState.IsValid) { IdentityResult result = await _userManager.CreateAsync(workerWithRole.Worker, workerWithRole.NewPassword ?? "666666"); if (result.Succeeded) { foreach (var role in workerWithRole.Roles) { IdentityResult roleResult = await _userManager.AddToRoleAsync(workerWithRole.Worker, role); } } } return(RedirectToAction("Index")); }