public IHttpActionResult Update(string key, AttentionNoticeStatus value) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } try { service.Update(key, value); return(StatusCode(HttpStatusCode.NoContent)); } catch (NotSupportedException) { return(BadRequest()); } catch (UnauthorizedAccessException) { return(StatusCode(HttpStatusCode.Forbidden)); } catch (KeyNotFoundException) { return(NotFound()); } catch (DuplicateKeyException) { ModelState.AddModelError(nameof(AttentionNoticeStatus.Key), nameof(DuplicateKeyException)); return(BadRequest(ModelState)); } }
public IHttpActionResult Create(AttentionNoticeStatus value) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } try { service.Create(value); return(CreatedAtRoute("AttentionNoticeStatuses_Create", new { id = value.Id }, value)); } catch (NotSupportedException) { return(BadRequest()); } catch (UnauthorizedAccessException) { return(StatusCode(HttpStatusCode.Forbidden)); } catch (KeyNotFoundException) { return(NotFound()); } catch (DuplicateKeyException) { ModelState.AddModelError(nameof(AttentionNoticeStatus.Key), nameof(DuplicateKeyException)); return(BadRequest(ModelState)); } }
private void OnReaded(AttentionNoticeStatus value) { using (log.Activity(m => m($"Execute {nameof(OnReaded)} for {nameof(AttentionNoticeStatus)}[{value.Id}]"))) { Ensure(value); } }
private void OnDeleted(AttentionNoticeStatus value) { using (log.Activity(m => m($"Execute {nameof(OnDeleted)} for {nameof(AttentionNoticeStatus)}[{value.Id}]"))) { log.Info($"Delete {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}] ignored. Expected Cascade Delete"); } }
public void Create(AttentionNoticeStatus value) { using (log.Activity(m => m($"Creating {nameof(AttentionNoticeStatus)} by {Thread.CurrentPrincipal?.Identity?.Name}"))) { using (log.Activity(m => m("Authorization"))) { try { security.ValidateCreate(value); } catch (UnauthorizedAccessException) { log.Warn($"Authorization Denied"); throw; } catch (Exception e) { log.Error($"Authorization Error", e); throw; } } var entity = null as AttentionNoticeStatus; using (log.Activity(m => m("Create Entity"))) { try { entity = context.AttentionNoticeStatuses.Add(value); context.SaveChanges(); } catch (Exception e) when(e.HasDuplicateKeyNumber()) { log.Warn($"Duplicate {nameof(AttentionNoticeStatus.Key)}:\"{value.Key}\"", e); throw new DuplicateKeyException(value.Key); } catch (Exception e) { log.Error($"Update Error", e); throw; } } var newValue = entity.Filter(); using (log.Activity(m => m("Emit Event"))) { try { emitter.OnCreated(newValue); } catch (Exception e) { log.Error($"Emit Event Error", e); throw; } } log.Info(m => m($"Created {nameof(AttentionNoticeStatus)}[{entity.Id}] by {Thread.CurrentPrincipal?.Identity?.Name}")); } }
private void Ensure(AttentionNoticeStatus value) { using (log.Activity(m => m($"Execute {nameof(Ensure)} for {nameof(AttentionNoticeStatus)}[{value.Id}]"))) { var entity = null as AttentionNoticeStatusTracker; using (log.Activity(m => m($"Read {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}]"))) { entity = context.AttentionNoticeStatusTrackers.SingleOrDefault(item => item.Id == value.Id); } if (entity == null) { using (log.Activity(m => m($"Create {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}]"))) { try { entity = context.AttentionNoticeStatusTrackers.Add(new AttentionNoticeStatusTracker { Id = value.Id, ValidThrough = DateTime.Now + options.Value.Life }); context.SaveChanges(); } catch (Exception e) { log.Error($"Create {nameof(AttentionNoticeStatusTracker)} for {nameof(AttentionNoticeStatus)}[{value.Id}] Error", e); throw; } } } else { using (log.Activity(m => m($"Update {nameof(AttentionNoticeStatusTracker)}[{value.Id}] for {nameof(AttentionNoticeStatus)}[{value.Id}]"))) { try { entity.ValidThrough = DateTime.Now + options.Value.Life; context.SaveChanges(); } catch (Exception e) { log.Error($"Update {nameof(AttentionNoticeStatusTracker)}[{entity.Id}] for {nameof(AttentionNoticeStatus)}[{value.Id}] Error", e); throw; } } } log.Info($"Ensured {nameof(AttentionNoticeStatusTracker)}[{entity.Id}] for {nameof(AttentionNoticeStatus)}[{value.Id}]"); } }
private void CheckAttentionNoticeStatusValue(AttentionNoticeStatus value) { var principal = GetAuthPrincipal(); //var facilityRoles = new[] { "BD.MedView.Web.Pharmacist", "BD.MedView.Web.Technician" }; //var facilityIds = principal.Roles // .Where(item => (facilityRoles.Contains(item.Name) && item.Realm.ParentId != null)) // .Select(item => item.Realm) // .SelectMany(item => item.Claims) // .Where(item => item.Issuer == "BD.MedView.Facility" // && item.OriginalIssuer == "BD.MedView.Facility" // && item.Type == "Provider.Id" // && item.ValueType == "Int32") // .Select(item => Convert.ToInt32(item.Value)) // .Distinct(); //if (facilityIds.Contains(value.FacilityId)) //{ // return; //} var resourceNames = new[] { "BD.MedView.Web.Screens.Pharmacist", "BD.MedView.Web.Screens.Technician" }; var facilityIdsQuery = context.Accesses .Where(item => item.PrincipalId == principal.Id) .Where(item => resourceNames.Contains(item.Permission.Resource.Name)) .SelectMany(item => item.Realm.Claims) .Where(item => item.Issuer == "BD.MedView.Facility" && item.OriginalIssuer == "BD.MedView.Facility" && item.Type == "Provider.Id" && item.ValueType == "Int32") .Select(item => item.Value) .Distinct(); var facilityIds = facilityIdsQuery.AsEnumerable() .Select(item => int.Parse(item)) .ToList(); if (facilityIds.Contains(value.FacilityId)) //if (facilityIds.Any()) { return; } throw new UnauthorizedAccessException(); }
void IEntitySecurity <AttentionNoticeStatus> .ValidateCreate(AttentionNoticeStatus value) { CheckAttentionNoticeStatusValue(value); }
void IEntitySecurity <AttentionNoticeStatus> .ValidateUpdate(AttentionNoticeStatus entity, AttentionNoticeStatus value) { CheckAttentionNoticeStatusValue(entity); CheckAttentionNoticeStatusValue(value); }
void IEntitySecurity <AttentionNoticeStatus> .ValidateRead(AttentionNoticeStatus value, string expand) { CheckAuthPrincipal(); }
public void Update(string key, AttentionNoticeStatus value) { using (log.Activity(m => m($"Update {nameof(AttentionNoticeStatus)}[{key}] by {Thread.CurrentPrincipal?.Identity?.Name}"))) { using (log.Activity(m => m($"Validate {nameof(value)}"))) { if (key != value.Key) { //Cannot change primary key log.Warn(l => l($"Cannot update unique key {nameof(AttentionNoticeStatus)}[{key}]")); throw new NotSupportedException(); } } var entity = null as AttentionNoticeStatus; using (log.Activity(m => m($"Read {nameof(AttentionNoticeStatus)}[{key}]"))) { entity = context.AttentionNoticeStatuses.SingleOrDefault(item => item.Key == key); if (entity == null) { log.Warn($"{nameof(AttentionNoticeStatus)}[{key}] is not found"); throw new KeyNotFoundException(); } } using (log.Activity(m => m("Authorization"))) { try { security.ValidateUpdate(entity, value); } catch (UnauthorizedAccessException) { log.Warn($"Authorization Denied"); throw; } catch (Exception e) { log.Error($"Authorization Error", e); throw; } } var oldValue = entity.Filter(); using (log.Activity(m => m("Update Entity"))) { try { entity.Key = value.Key; entity.FacilityId = value.FacilityId; entity.UpdatedBy = value.UpdatedBy; entity.UpdatedDateTime = value.UpdatedDateTime; context.SaveChanges(); } catch (Exception e) when(e.HasDuplicateKeyNumber()) { log.Warn($"Duplicate {nameof(AttentionNoticeStatus.Key)}:\"{value.Key}\"", e); throw new DuplicateKeyException(value.Key); } catch (Exception e) { log.Error($"Update Error", e); throw; } } var newValue = entity.Filter(); using (log.Activity(m => m("Emit Event"))) { try { emitter.OnUpdated(newValue, oldValue); } catch (Exception e) { log.Error($"Emit Event Error", e); throw; } } log.Info(l => l($"Updated {nameof(AttentionNoticeStatus)}[{key}] by {Thread.CurrentPrincipal?.Identity?.Name}")); } }