Exemplo n.º 1
0
		public async Task<ActionResult> Edit(EditAccountViewModel model)
		{
			if (ModelState.IsValid)
			{
				using (var manager = UserManager)
				{
					var user = await manager.FindByIdAsync(model.Id);

					if (user == null)
					{
						TempData.AddMessage(MessageType.Danger, string.Format(GlobalRes.UserNoFound, model.Id));
						return RedirectToAction(nameof(Table));
					}

					user.UserName = model.UserName;
					user.Email = model.Email;

					var result = await manager.UpdateAsync(user);

					if (!result.Succeeded)
					{
						foreach (var error in result.Errors)
							ModelState.AddModelError("", error);

						InitTeachersItems(model.PairTeacherId);

						return View("EditAccount", model);
					}

					var userRoles = await manager.GetRolesAsync(model.Id); // роли редактируемого юзера

					(await manager.RemoveFromRolesAsync(model.Id, userRoles.Intersect(model.UnselectedRoles).ToArray()))
						.AddErrorsIfFailed(TempData);

					(await manager.AddToRolesAsync(model.Id, model.SelectedRoles.Except(userRoles).ToArray()))
						.AddErrorsIfFailed(TempData);

					var pairTeacherIdHasValue = model.PairTeacherId.HasValue;

					if (user.HasTeacher)
						if (pairTeacherIdHasValue)
						{
							if (user.Teacher.TeacherId != model.PairTeacherId.Value)
							{
								// есть учитель у не обновл. пользователя когда есть у обновленого и это не один и тот же учитель
								_teacherRepository.RemovePairToUser(user.Teacher.TeacherId);
								_teacherRepository.AddPairToUser(model.PairTeacherId.Value, user.Id);
							}
						} else
							// есть учитель у не обновл. пользователя когда нет у обновленого
							_teacherRepository.RemovePairToUser(user.Teacher.TeacherId);

					else if (pairTeacherIdHasValue)
						// есть учитель у обновл. пользователя когда нету учителя у не обновленого пользователя
						_teacherRepository.AddPairToUser(model.PairTeacherId.Value, user.Id);

					TempData.AddMessage(MessageType.Success, string.Format(GlobalRes.UserSavedMsg, user.UserName));
					_logger.Info("User \"{0}\" saved by {1}.", user.UserName, User.Identity.Name);
				}

				return RedirectToAction(nameof(Table));
			}

			InitTeachersItems(model.PairTeacherId);
			// there is something wrong with the data values
			return View("EditAccount", model);
		}
Exemplo n.º 2
0
		public async Task<ActionResult> Edit(int Id)
		{
			EditAccountViewModel model;
			using (var userManager = UserManager)
			{
				var user = await userManager.FindByIdAsync(Id);

				if (user == null)
				{
					TempData.AddMessage(MessageType.Warning, string.Format(GlobalRes.UserNoFound, Id));
					return RedirectToAction(nameof(Table));
				}

				using (var roleManager = RoleManager)
				{
					var roles = roleManager.Roles.AsNoTracking().AsEnumerable();

					var userRoles = await userManager.GetRolesAsync(Id);

					model = new EditAccountViewModel()
					{
						Id = user.Id,
						Email = user.Email,
						UserName = user.UserName,
						Roles = roles.Select(r => new RoleItem() { Value = r.Name, Selected = userRoles.Contains(r.Name) }).ToList()
					};
				}

				InitTeachersItems(user.Teacher?.TeacherId);
			}

			return View("EditAccount", model);
		}