public async Task<bool> InsertOrUpdate(IdentityUserViewModel model, ApplicationUserManager userManager) { var user = await userManager.FindByIdAsync(model.Id); if (user == null) { user = new ApplicationUser(); user.Assign(model); var result = await userManager.CreateAsync(user, "1234567"); if (!result.Succeeded) return false; model.Id = user.Id; } else { user.Email = model.Email; user.UserName = model.UserName; user.DUI = model.DUI; user.PhoneNumber = model.PHONE_2; user.ADDRESS = model.ADDRESS; user.Category = model.Category; user.FirstName = model.FirstName; user.LastName = model.LastName; user.DUI = model.DUI; user.PHONE_2 = model.PHONE_2; user.ProfilePicture = model.ProfilePicture; user.CenterId = model.CenterId; //user.Address = model.Address; //user.FirstName = model.FirstName; //user.LastName = model.LastName; //user.DocumentNum = model.DocumentNum; //user.ProfilePicture = model.ProfilePicture; await userManager.UpdateAsync(user); } if (model.ForceChangePassword) { var tok = await userManager.GeneratePasswordResetTokenAsync(model.Id); var result = await userManager.ResetPasswordAsync(model.Id, tok, model.Password); if (!result.Succeeded) return false; } var roles = await userManager.GetRolesAsync(model.Id); if (!roles.Any() && !string.IsNullOrEmpty(model.Role)) { var res = await userManager.AddToRoleAsync(model.Id, model.Role); } if (roles.All(r => r != model.Role) && roles.Any()) { var result = await userManager.AddToRoleAsync(model.Id, model.Role); } roles.Where(r => r != model.Role).ToList().ForEach(role => userManager.RemoveFromRole(model.Id, role)); if (model.CenterId != 0) { var claim = await Context.UserClaims.FirstOrDefaultAsync(c => c.UserId == user.Id && c.ClaimType == "CenterId"); var claims = await userManager.GetClaimsAsync(user.Id); if (claim != null) { claim.ClaimValue = model.CenterId.Value.ToString(); await Context.SaveChangesAsync(); } else { await userManager.AddClaimAsync(model.Id, new System.Security.Claims.Claim("CenterId", model.CenterId.ToString())); } } return true; }