public async Task <IActionResult> UpdateDependent([FromBody] Api.DependentUpdate dependent) { if (dependent.UserId == ApplicationUser.SuperAdminId) { return(new JsonResult(new { Error = "Cannot edit super admin." }) { StatusCode = (int)HttpStatusCode.Forbidden }); } ApplicationUser user = await userManager.GetUserAsync(User); if (dependent.UserId == user.Id) { return(new JsonResult(new { Error = "Cannot edit self." }) { StatusCode = (int)HttpStatusCode.Forbidden }); } if (dependent.UserId == null) { return(new JsonResult(new { Error = "UserId must be set." }) { StatusCode = (int)HttpStatusCode.BadRequest }); } List <string> errors = new List <string>(); if (dependent.Id == null) { if (dependent.NameFirst == null) { errors.Add("NameFirst must be set"); } if (dependent.NameLast == null) { errors.Add("NameLast must be set"); } } if (dependent.NameFirst != null && dependent.NameFirst.Length <= 0) { errors.Add("NameFirst length must be greater than 0"); } if (dependent.NameLast != null && dependent.NameLast.Length <= 0) { errors.Add("NameLast length must be greater than 0"); } if (dependent.BenefitsCost != null && dependent.BenefitsCost < 0) { errors.Add("BenefitsCost value must not be negative"); } if (dependent.Modifier != null && dependent.Modifier < 0) { errors.Add("Modifer value must not be negative"); } if (errors.Count > 0) { return(new JsonResult(new { Error = "Request contains errors.", Errors = errors }) { StatusCode = (int)HttpStatusCode.BadRequest }); } ApplicationUser appUser = await userManager.Users.Include(x => x.Employee) .Include(x => x.Employee.BenefitsEmployee) .Include(x => x.Employee.BenefitsDependents) .SingleOrDefaultAsync(x => x.Id == dependent.UserId); List <BenefitsDependent> dependents = appUser.Employee.BenefitsDependents; if (dependent.Id == null) { // Create new dependent var target = new BenefitsDependent() { Id = Guid.NewGuid().ToString(), NameFirst = dependent.NameFirst, NameLast = dependent.NameLast, }; if (dependent.BenefitsCost != null) { target.BenefitsCost = (decimal)dependent.BenefitsCost; } if (dependent.Modifier != null) { target.Modifier = (decimal)dependent.Modifier; } else if (dependent.NameFirst[0] == 'A') { target.Modifier = 0.9m; } dependents.Add(target); } else { // Update existing dependent BenefitsDependent target = dependents.Find(x => x.Id == dependent.Id); if (target == null) { return(new JsonResult(new { Error = "Dependent not found." }) { StatusCode = (int)HttpStatusCode.NotFound }); } if (dependent.NameFirst != null) { target.NameFirst = dependent.NameFirst; } if (dependent.NameLast != null) { target.NameLast = dependent.NameLast; } if (dependent.BenefitsCost != null) { target.BenefitsCost = (decimal)dependent.BenefitsCost; } if (dependent.Modifier != null) { target.Modifier = (decimal)dependent.Modifier; } } await userManager.UpdateAsync(appUser); return(Ok(new Api.Employee(appUser))); }
public async Task PopulateSeedData() { List <string> roles = new List <string> { "ViewSelf", "ViewOther", "AddEdit", "Remove", "PermissionsView", "PermissionsEdit", }; List <string> noRoles = new List <string>(); RoleManager <IdentityRole> roleManager = context.GetService <RoleManager <IdentityRole> >(); // Add missing roles by Id foreach (var role in roles.Where(x => !context.Roles.Any(y => y.Name == x))) { await roleManager.CreateAsync(new IdentityRole(role)); } // TODO: Move seed data somewhere more appropriate var users = new[] { new { AppUser = Employee.FromSeed( id: ApplicationUser.SuperAdminId, email: "*****@*****.**", password: "******", nameFirst: "Super", nameLast: "Admin", salaryBase: 0, benefitsCost: 0 ), Roles = roles, }, new { AppUser = Employee.FromSeed( email: "*****@*****.**", password: "******", nameFirst: "Seed", nameLast: "User01" ), Roles = noRoles }, new { AppUser = Employee.FromSeed( email: "*****@*****.**", password: "******", nameFirst: "Seed", nameLast: "User02" ), Roles = new List <string>() { "ViewSelf", }, }, new { AppUser = Employee.FromSeed( email: "*****@*****.**", password: "******", nameFirst: "Seed", nameLast: "User03" ), Roles = new List <string>() { "ViewSelf", "ViewOther", }, }, new { AppUser = Employee.FromSeed( email: "*****@*****.**", password: "******", nameFirst: "Seed", nameLast: "User04" ), Roles = new List <string>() { "ViewSelf", "ViewOther", "AddEdit", }, }, new { AppUser = Employee.FromSeed( email: "*****@*****.**", password: "******", nameFirst: "Seed", nameLast: "User05", salaryBase: 100000, dependents: new List <BenefitsDependent>() { BenefitsDependent.FromSeed( nameFirst: "Anthony", nameLast: "User05" ), } ), Roles = new List <string>() { "ViewSelf", }, }, }; UserManager <ApplicationUser> userManager = context.GetService <UserManager <ApplicationUser> >(); PasswordHasher <ApplicationUser> hasher = new PasswordHasher <ApplicationUser>(); // TODO: Split seed data into "always" and "dev only" // Add missing users by Id foreach (var user in users.Where(x => !context.Users.Any(y => x.AppUser.Email == y.UserName || x.AppUser.Id == y.Id))) { // With password validation //var results = await userManager.CreateAsync(user.AppUser, user.AppUser.Password); // Without password validation //user.AppUser.PasswordHash = hasher.HashPassword(null, user.AppUser.password); // TODO: Do something with `results` var results = await userManager.CreateAsync(user.AppUser); await userManager.AddToRolesAsync(user.AppUser, user.Roles); } await context.SaveChangesAsync(); }