public async Task<ActionResult> AssignRoles(AssignRolesViewModel vm) { vm.AllRoles = await _context.Roles.Select(r => r.Name).ToListAsync(); var rolesToAdd = new List<string>(); var rolesToRemove = new List<string>(); foreach (var role in vm.AllRoles) { if (vm.SelectedRoles.Contains(role) && !await _userManager.IsInRoleAsync(vm.UserId, role)) { rolesToAdd.Add(role); } else if (!vm.SelectedRoles.Contains(role) && await _userManager.IsInRoleAsync(vm.UserId, role)) { rolesToRemove.Add(role); } } var result = await _userManager.AddToRolesAsync(vm.UserId, rolesToAdd.ToArray()); if (!result.Succeeded) { result.Errors.Do(e => ModelState.AddModelError(String.Empty, e)); } result = await _userManager.RemoveFromRolesAsync(vm.UserId, rolesToRemove.ToArray()); if (!result.Succeeded) { result.Errors.Do(e => ModelState.AddModelError(String.Empty, e)); } return View(vm); }
public async Task<ActionResult> AssignRoles(string id) { var user = _context.Users.Find(id); if (user == null) { return RedirectToAction("Index"); } var vm = new AssignRolesViewModel { UserId = user.Id, AllRoles = await _context.Roles.Select(r => r.Name).ToListAsync(), SelectedRoles = user.Roles.Join(_context.Roles, e=> e.RoleId, e => e.Id, (iur ,ir) => ir.Name).ToList() }; return View(vm); }