public async Task <ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, PhoneNumber = model.PhoneNumber, FirstName = model.FirstName, LastName = model.LastName, ViewToPublic = model.ViewToPublic, IsAPilot = GetRoleNameFromRoleId(model.Role.RoleId) == "Pilot" || model.IsAPilot }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { var im = new IdentityManager(); string roleName = _db.Roles.Find(model.Role.RoleId).Name; im.AddUserToRole(user.Id, roleName); if (user.IsAPilot) { var pm = new PilotManager(); pm.AddPilot(user); } if (roleName != "Admin") { return(RedirectToAction("Index", "Account")); } List <Plane> planes = _db.Planes.ToList(); foreach (Plane plane in planes) { UserManager.AddClaim(user.Id, new Claim("PlaneAccess", plane.TailNumber)); } //await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return(RedirectToAction("Index", "Account")); } AddErrors(result); } // If we got this far, something failed, redisplay form return(View(model)); }
public async Task <ActionResult> Edit(EditViewModel idModel) { if (!ModelState.IsValid) { return(View(idModel)); } List <IdentityRole> roleUserList = _db.Roles.ToList(); foreach (IdentityRole userRole in roleUserList) { List <IdentityUserRole> userRoleList = userRole.Users.ToList(); foreach (IdentityUserRole u in userRoleList.Where(u => u.UserId == idModel.Id)) { AddOrRemoveFromRole(u.UserId, u.RoleId); } } AddOrRemoveFromRole(idModel.Id, idModel.RoleId); _db.SaveChanges(); ApplicationUser user = await UserManager.FindByIdAsync(idModel.Id); user.UserName = idModel.Email; user.Email = idModel.Email; user.PhoneNumber = idModel.PhoneNumber; user.FirstName = idModel.FirstName; user.LastName = idModel.LastName; user.ViewToPublic = idModel.ViewToPublic; user.IsAPilot = GetRoleNameFromUserId(idModel.Id) == "Pilot" || idModel.IsAPilot; IdentityResult result = await UserManager.UpdateAsync(user); if (result.Succeeded) { var pm = new PilotManager(); if (user.IsAPilot) { if (!pm.PilotExists(user)) { pm.AddPilot(user); } } else { if (pm.PilotExists(user)) { pm.RemovePilot(user); } } if (GetRoleNameFromRoleId(idModel.RoleId) != "Admin") { return(RedirectToAction("Index")); } List <Plane> planes = _db.Planes.ToList(); List <string> claims = user.Claims.Where(c => c.ClaimType == "PlaneAccess").Select(c => c.ClaimValue).ToList(); foreach (Plane plane in planes) { if (!claims.Contains(plane.TailNumber)) { UserManager.AddClaim(user.Id, new Claim("PlaneAccess", plane.TailNumber)); } } return(RedirectToAction("Index")); } MessageBox.Show(result.Errors.FirstOrDefault()); return(View(idModel)); }