public IActionResult EditProject(Guid ProjectId) { var project = Context.DocumentationProjects.FirstOrDefault(Curr => Curr.Id == ProjectId); if (project == null) { return HttpNotFound(); } var usersWithAccess = Context.UserProjects.Where(Assignment => Assignment.ProjectId == project.Id).Select(Assignment => Assignment.User.Email).ToList(); var usersWithoutAccess = Context.Users.Select(CurrentUser => CurrentUser.Email).Where(CurrentUser => !usersWithAccess.Contains(CurrentUser)).ToList(); var model = new EditProjectViewModel(); model.ProjectName = project.Name; model.IsPublic = project.IsPublic; model.PathToIndexPage = project.PathToIndex; model.UsersWithAccess = usersWithAccess; model.AvailableUsers = usersWithoutAccess; model.ApiKey = project.ApiKey; return View(model); }
public IActionResult EditProject(Guid ProjectId, EditProjectViewModel model, List<string> SelectedUsers) { if (!ModelState.IsValid) { return View(model); } var databaseProject = Context.DocumentationProjects.FirstOrDefault(Project => Project.Id == ProjectId); if (databaseProject == null) { return HttpNotFound(); } databaseProject.ApiKey = model.ApiKey; databaseProject.IsPublic = model.IsPublic; databaseProject.Name = model.ProjectName; databaseProject.PathToIndex = model.PathToIndexPage; Context.SaveChanges(); var selectedUsersIds = Context.Users.Where(User => SelectedUsers.Contains(User.Email)).Select(User => User.Id).ToList(); // Add missing users var usersToAdd = selectedUsersIds.Where(CurrentId => Context.UserProjects.All(Assignment => Assignment.UserId != CurrentId)); foreach (var newUserId in usersToAdd) { Context.UserProjects.Add(new UserProjectAccess {UserId = newUserId, ProjectId = databaseProject.Id}); } // Remove users that no longer have access var usersToRemove = Context.UserProjects.Where(Assignment => Assignment.ProjectId == databaseProject.Id).Where(Assignment => !selectedUsersIds.Contains(Assignment.UserId)); Context.UserProjects.RemoveRange(usersToRemove); Context.SaveChanges(); var usersWithAccess = Context.UserProjects.Where(Assignment => Assignment.ProjectId == databaseProject.Id).Select(Assignment => Assignment.User.Email).ToList(); var usersWithoutAccess = Context.Users.Select(CurrentUser => CurrentUser.Email).Where(CurrentUser => !usersWithAccess.Contains(CurrentUser)).ToList(); model.UsersWithAccess = usersWithAccess; model.AvailableUsers = usersWithoutAccess; ViewBag.SuccessMessage = $"Changed project {databaseProject.Name}."; return View(model); }