public async Task <ActionResult> Edit([Bind(Include = "Id,FirstName,LastName,Email,PhoneNumber,Login,Password,ConfirmPassword,OldHashedPassword,IsActive,InititallySelectedRoles")] CustomerCreateUpdateViewModel customer, int[] roleId) { if (ModelState.IsValid) { var customerEntity = (CustomerEntity)customer; _db.Entry(customerEntity).State = EntityState.Modified; await _db.SaveChangesAsync(); // Updating roles var selectedRoleNames = roleId.Select(id => _db.Roles.Find(id).Name); var notSelectedNamesInRole = RoleNames.GetAllRoleNames().Except(selectedRoleNames).Where(roleName => Roles.IsUserInRole(customer.Login, roleName)).ToArray(); if (notSelectedNamesInRole.Length > 0) { Roles.RemoveUserFromRoles(customer.Login, notSelectedNamesInRole); } var selectedNamesNotInRole = selectedRoleNames.Where(roleName => !Roles.IsUserInRole(customer.Login, roleName)).ToArray(); if (selectedNamesNotInRole.Length > 0) { Roles.AddUserToRoles(customer.Login, selectedNamesNotInRole); } return(RedirectToAction("Index")); } return(View(customer)); }
public ActionResult Create([Bind(Include = "Id,FirstName,LastName,Email,PhoneNumber,Login,Password,ConfirmPassword,IsDisabled")] CustomerCreateUpdateViewModel customer, int[] roleId) { if (roleId == null || roleId.Length < 1) { ModelState.AddModelError("RolesList", "At least one role must be selected."); } if (ModelState.IsValid) { MembershipCreateStatus status; // Create customer as application user. ((CustomMembershipProvider)Membership.Provider).CreateUser((CustomerEntity)customer, out status); if (status != MembershipCreateStatus.Success) { ModelState.AddModelError(string.Empty, status.ToString()); } else { // Creating roles var selectedRoleNames = roleId.Select(id => _db.Roles.Find(id).Name).ToArray(); Roles.AddUserToRoles(customer.Login, selectedRoleNames); return(RedirectToAction("Index")); } } return(View(customer)); }