public ActionResult EditProfile(UserProfileModel profile, List<string> role) { if (ModelState.IsValid) { if (profile == null) throw new HttpException(404, "Not Found"); var provider = new UserMembershipProvider(userService, avatarService, roleService); bool isNameChanged = false; try { if (User.IsInRole("admin")) { isNameChanged = ChangeUsername(provider, profile); provider.ChangeEmail(profile.Username, profile.Email); SetRoles(profile, role); } else { profile.Username = profile.PreviousUsername; } ChangeAvatar(provider, profile); ChangePassword(provider, profile); if (ModelState.IsValid) { TempData["MessageType"] = MessageType.success; TempData["StrongResultMessage"] = "Изменения сохранены"; if (isNameChanged && User.Identity.Name == profile.PreviousUsername) { return RedirectToAction("Logout", "Account"); } return RedirectToAction("Index", "Home"); } } catch (Exception) { TempData["MessageType"] = MessageType.error; TempData["StrongResultMessage"] = "Произошла ошибка во время сохранения изменений!"; TempData["ResultMessage"] = "Некоторые данные могут быть не сохранены"; return RedirectToAction("Index", "Home"); } } return View(profile); }
private void ChangePassword(UserMembershipProvider provider, UserProfileModel profile) { if (profile.Password != null && !provider.ChangePassword(profile.Username, profile.PreviousPassword, profile.Password)) { ModelState.AddModelError("PreviousPassword", "Неправильный пароль"); } }
private bool ChangeUsername(UserMembershipProvider provider, UserProfileModel profile) { if (profile.PreviousUsername != profile.Username && !string.IsNullOrEmpty(profile.Username)) { if (!provider.IsUsernameExist(profile.Username)) { provider.ChangeUsername(profile.PreviousUsername, profile.Username); return true; } else { ModelState.AddModelError("Username", "Такое имя пользователя уже существует"); } } return false; }
private void ChangeAvatar(UserMembershipProvider provider, UserProfileModel profile) { if (profile.AvatarFile != null) { if (profile.AvatarFile.ContentLength < RegisterUserModel.maxAvatarSize) { provider.ChangeUserAvatar(profile.AvatarFile, profile.UserId); Session["Avatar"] = null; } else { ModelState.AddModelError("AvatarFile", String.Format("Размер аватара не может превышать {0} МБ", RegisterUserModel.maxAvatarSize / (1024 * 1024))); } } }
public AccountController(IUserService userService, IAvatarService avatarService, IRoleService roleService) { membershipProvider = new UserMembershipProvider(userService, avatarService, roleService); }