public ActionResult Edit(UserViewModel user, int[] selectedRoles) { var allRoles = roleService.GetAll().Select(item => item.ToMvcRoleModel()); var roles = new List<RoleViewModel>(); if (selectedRoles != null) { user.RoleNames = new List<string>(); foreach (var r in allRoles.Where(role => selectedRoles.Contains(role.Id))) { user.RoleNames.Add(r.Name); roles.Add(r); } } try { userService.Update(user.ToBllUser(roles)); } catch (ArgumentNullException e) { return RedirectToAction("Index", "Error", new { id = "Параметр " + e.Message + " NULL" }); } catch (ArgumentException e) { return RedirectToAction("Index", "Error", new { id = e.Message }); } catch { return RedirectToAction("Index", "Error", new { id = "Ошибка при сохранении файла в БД" }); } return RedirectToAction("Index"); }
private void UpdateUserRoles(UserViewModel user, string[] selectedRoles) { if (selectedRoles == null) { user.Roles = new List<RoleViewModel>(); return; } var selectedRolesHS = new HashSet<string>(selectedRoles); var userRoles = new HashSet<int> (user.Roles.Select(x => x.Id)); foreach (var role in _userService.GetAllRoles()) { if (selectedRolesHS.Contains(role.Id.ToString())) { if (!userRoles.Contains(role.Id)) { user.Roles.Add(role.ToRoleViewModel()); } } else { if (userRoles.Contains(role.Id)) { user.Roles.Remove(role.ToRoleViewModel()); } } } }
public ActionResult Edit(UserViewModel user, string[] selectedRoles) { UpdateUserRoles(user, selectedRoles); _userService.UpdateUser(user.ToBllUser()); if (!((ClaimsIdentity)User.Identity).Claims .Any(x => x.Type == ClaimTypes.Role && x.Value == "Admin")) { _signService.IdentitySignout(); _signService.IdentitySignin(user.ToBllUser()); } return RedirectToAction("Index", "Home",null); }