public async System.Threading.Tasks.Task <ActionResult> RemoveAccount() { if (User.IsInRole("administrator")) { TempData["Message"] = "Администратор не может удалить свою учетную запись"; return(RedirectToAction("Manage")); //ViewBag.ErrorMessage = "Администратор не может удалить свою учетную запись"; //return View("Error"); } var currentUserId = User.Identity.GetUserId(); using (var db = new ContestMeterDbContext()) { var user = db.Users.Find(currentUserId); if (user != null) { user.IsDeleted = true; db.Entry(user).State = EntityState.Modified; await db.SaveChangesAsync(); } else { return(RedirectToAction("Manage")); } } AuthenticationManager.SignOut(); return(RedirectToAction("Index", "Home")); }
public bool AddParticipantToDefaultTeam(string participantId) { using (var db = new ContestMeterDbContext()) { var user = db.Users.Find(participantId); if (user == null) { return(false); } var defaultTeam = db.Teams.FirstOrDefault(t => t.Name == "Одиночки"); if (defaultTeam == null) { return(false); } var teamParticipant = new TeamParticipant { Id = Guid.NewGuid(), TeamId = defaultTeam.Id, ParticipantId = user.Id }; db.Entry(teamParticipant).State = EntityState.Added; user.TeamId = defaultTeam.Id; defaultTeam.Participants.Add(user); db.Entry(user).State = EntityState.Modified; db.Entry(defaultTeam).State = EntityState.Modified; db.SaveChanges(); return(true); } }
protected override void Dispose(bool disposing) { if (disposing && db != null) { db.Dispose(); db = null; } base.Dispose(disposing); }
public async System.Threading.Tasks.Task <ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = await UserManager.FindAsync(model.UserName, model.Password); if (user != null) { if (!user.IsDeleted) { await SignInAsync(user, model.RememberMe); using (var db = new ContestMeterDbContext()) { var userInfo = await db.UserInfos.FindAsync(user.UserInfoId); if (userInfo != null) { userInfo.LastVisitDate = DateTime.Now; db.Entry(userInfo).State = EntityState.Modified; await db.SaveChangesAsync(); } } return(RedirectToLocal(returnUrl)); } ModelState.AddModelError("", "Регистрация пользователя не была подтверждена или он был удален. Администратор должен подтвердить регистрацию/удаление."); } else { ModelState.AddModelError("", "Неправильное имя пользователя или пароль."); } } return(View(model)); }
public async System.Threading.Tasks.Task <ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { if (await UserManager.Users.AnyAsync(u => u.Email == model.Email)) { ModelState.AddModelError("", "Пользователь с таким email уже существует."); } else { if (model.UseRecaptcha) { var recaptchaHelper = this.GetRecaptchaVerificationHelper(); if (string.IsNullOrEmpty(recaptchaHelper.Response)) { ModelState.AddModelError("", "Ответ капчи не может быть пустым."); return(View(model)); } var recaptchaResult = await recaptchaHelper.VerifyRecaptchaResponseTaskAsync(); if (recaptchaResult != RecaptchaVerificationResult.Success) { ModelState.AddModelError("", "Капча введена неверно."); return(View(model)); } } var userInfo = new UserInfo { Id = Guid.NewGuid(), CreatedDate = DateTime.Now, LastVisitDate = DateTime.Now, School = model.School, Grade = model.Grade, HomeTown = model.HomeTown }; using (var db = new ContestMeterDbContext()) { var defaultTeam = db.Teams.Include(t => t.Participants).FirstOrDefault(t => t.Name == "Одиночки"); if (defaultTeam == null) { return(HttpNotFound()); } if (defaultTeam.Participants.Count == defaultTeam.MaxTeamNumber) { ModelState.AddModelError("", "Достигнуто максимальное количество участников команды 'Одиночки'. Пожалуйста, обратитесь к администратору, чтобы он зарезервировал Вам место в этой команде."); return(View(model)); } } var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, LastName = model.LastName, FirstName = model.FirstName, MiddleName = model.MiddleName, Ip = GetLocalIP4().ToString(), UserInfoId = userInfo.Id, UserInfo = userInfo, Rating = 0, TeamId = null }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { // добавляем для только что созданного пользователя роль "participant" UserManager.AddToRole(user.Id, "participant"); //функция для добавления только что созданного участника в команду по-умолчанию "Одиночки" if (!AddParticipantToDefaultTeam(user.Id)) { return(HttpNotFound()); } await SignInAsync(user, isPersistent : false); return(RedirectToAction("Index", "Home")); } else { AddErrors(result); } } } return(View(model)); }