public async Task <IHttpActionResult> AddOrUpdateProjectAccess(ProjectShqUsersViewModel projectShqUsersViewModel) { if (!ModelState.IsValid) { return(BadRequest("Not a valid model")); } Project project = await db.Projects.Where(item => item.Id == projectShqUsersViewModel.ProjectId).FirstOrDefaultAsync(); if (project == null) { return(NotFound()); } var CreatedBy = await db.ShqUsers.Include("IdentityUser").FirstOrDefaultAsync(item => item.IdentityUserId == project.CreatedById); if (HttpContext.Current.User.Identity.Name != CreatedBy.IdentityUser.UserName && HttpContext.Current.User.IsInRole(ShqConstants.AdministratorRole) == false) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access")); } ShqUser shqUser = await db.ShqUsers.Where(item => item.EmailAddress == projectShqUsersViewModel.EmailAddress).FirstOrDefaultAsync(); if (shqUser == null) { return(NotFound()); } var ps = shqUser.ProjectsAccess.Where(item => item.ProjectId == projectShqUsersViewModel.ProjectId && item.ShqUserId == shqUser.IdentityUserId).FirstOrDefault(); if (ps != null) { ps.Privilege = projectShqUsersViewModel.Privilege; ps.LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId; ps.LastModfiedTime = DateTime.Now; } else { var newAccess = new ProjectShqUsers() { ProjectId = projectShqUsersViewModel.ProjectId, ShqUserId = shqUser.IdentityUserId, Privilege = projectShqUsersViewModel.Privilege, CreatedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId, LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId }; newAccess.LastModifiedById = newAccess.CreatedById; shqUser.ProjectsAccess.Add(newAccess); } await db.SaveChangesAsync(); (new AuditsController()).AddAuditEntry("api/Projects/AddOrUpdateAccess", JsonConvert.SerializeObject(projectShqUsersViewModel)); return(Ok(projectShqUsersViewModel)); }
public async Task <IHttpActionResult> UpdateProject(ProjectRequestViewModel project) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Project pro = await db.Projects.FindAsync(project.Id); if (pro == null) { return(NotFound()); } if (ProjectHelper.HasUpdateAccess(pro) == false) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access")); } db.Entry(pro).State = EntityState.Modified; pro.ProjectName = project.Name; pro.Description = project.Description; pro.Tag = project.Tag; pro.Status = project.Status; pro.LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId; pro.LastModfiedTime = DateTime.Now; pro.ProjectsAccess.RemoveAll(item => item.ProjectId == pro.Id); if (project.UsersPrivileges.Count > 0) { foreach (var item in project.UsersPrivileges) { var newAccess = new ProjectShqUsers() { ProjectId = project.Id, ShqUserId = db.ShqUsers.Where(u => u.EmailAddress == item.EmailAddress).FirstOrDefault().IdentityUserId, Privilege = item.Privilege, CreatedById = pro.CreatedById, LastModifiedById = pro.CreatedById }; newAccess.LastModifiedById = newAccess.CreatedById; pro.ProjectsAccess.Add(newAccess); } } await db.SaveChangesAsync(); ProjectViewModel result = new ProjectViewModel(pro, db); result.Privilege = ShqConstants.AllowProjectUpdate; (new AuditsController()).AddAuditEntry("api/Projects/Update", JsonConvert.SerializeObject(result)); return(Ok(result)); }
public async Task <IHttpActionResult> AddProject(ProjectRequestViewModel projectView) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Project pro = await db.Projects.FindAsync(projectView.Id); if (pro != null) { return(Ok("已存在")); } pro = await db.Projects.FirstOrDefaultAsync(item => item.ProjectName == projectView.Name); if (pro != null) { return(Ok("已存在")); } Project project = projectView.ToProject(); project.CreatedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId; project.LastModifiedById = project.CreatedById; db.Projects.Add(project); if (project.Type == "FTAProject") { db.FTAProjects.Add(new FTAProject() { Id = Guid.NewGuid(), ProjectId = projectView.Id, CreatedById = project.CreatedById, LastModifiedById = project.LastModifiedById }); } if (project.Type == "FMEAProject") { db.FMEAProjects.Add(new FMEAProject() { Id = Guid.NewGuid(), ProjectId = projectView.Id, CreatedById = project.CreatedById, LastModifiedById = project.LastModifiedById }); } if (project.Type == "WorkProject") { var wp = db.WorkProjects.Add(new WorkProject() { Id = Guid.NewGuid(), ProjectId = projectView.Id, Level = projectView.Level, CreatedById = project.CreatedById, LastModifiedById = project.LastModifiedById, WorkProjectTemplateId = ShqConstants.DefaultWorkProjectTemplateId }); db.SaveChanges(); try { ProjectFilesController pfc = new ProjectFilesController(); await pfc.SyncProjectFiles(wp.ProjectId); } catch (Exception) { } } int i = 0; if (projectView.UsersPrivileges.Count > 0) { i++; foreach (var item in projectView.UsersPrivileges) { var newAccess = new ProjectShqUsers() { ProjectId = project.Id, ShqUserId = db.ShqUsers.Where(u => u.EmailAddress == item.EmailAddress).FirstOrDefault().IdentityUserId, Privilege = item.Privilege, CreatedById = project.CreatedById, LastModifiedById = project.CreatedById }; newAccess.LastModifiedById = newAccess.CreatedById; db.ProjectShqUsers.Add(newAccess); } } await db.SaveChangesAsync(); ProjectViewModel result = new ProjectViewModel(project, db); result.Description = i.ToString(); result.Privilege = ShqConstants.AllowProjectUpdate; (new AuditsController()).AddAuditEntry("api/Projects/Add", JsonConvert.SerializeObject(result)); return(Ok(result)); }