private async Task HandleRoleChange(bool isUserCurrentlyAdmin, User oldUser, UserBookingViewModel newUser) { if (isUserCurrentlyAdmin != newUser.IsAdmin) { if (newUser.IsAdmin) { await _userManager.RemoveFromRoleAsync(oldUser.AspNetUserId, UserConsts.USER_ROLE); await _userManager.AddToRoleAsync(oldUser.AspNetUserId, UserConsts.ADMIN_ROLE); } else { await _userManager.RemoveFromRoleAsync(oldUser.AspNetUserId, UserConsts.ADMIN_ROLE); await _userManager.AddToRoleAsync(oldUser.AspNetUserId, UserConsts.USER_ROLE); } } }
public async Task <ActionResult> Edit(UserBookingViewModel usrBookingViewModel) { if (ModelState.IsValid) { var user = _accountService.Get(usrBookingViewModel.UserId); var isUserCurrentlyAdmin = await _userManager.IsInRoleAsync(user.AspNetUserId, UserConsts.ADMIN_ROLE); await HandleRoleChange(isUserCurrentlyAdmin, user, usrBookingViewModel); var aspNetUser = await _userManager.FindByIdAsync(usrBookingViewModel.AspNetUserId); if (aspNetUser.PhoneNumber != usrBookingViewModel.PhoneNumber) { aspNetUser.PhoneNumber = usrBookingViewModel.PhoneNumber; await _userManager.UpdateAsync(aspNetUser); } var result2 = await _accountService.UpdateAsync(Mapper.Map <UserBookingViewModel, User>(usrBookingViewModel)); return(RedirectToAction("Index")); } return(View(usrBookingViewModel)); }