diff options
Diffstat (limited to 'api/WhatApi/Database.cs')
| -rw-r--r-- | api/WhatApi/Database.cs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/api/WhatApi/Database.cs b/api/WhatApi/Database.cs index 8e8ed07..8aeffed 100644 --- a/api/WhatApi/Database.cs +++ b/api/WhatApi/Database.cs @@ -1,13 +1,14 @@ using System.Security.Claims; +using WhatApi.Extras; using WhatApi.Tables; namespace WhatApi; -public class Database(DbContextOptions<Database> options, IHttpContextAccessor httpContextAccessor) : DbContext(options) +public class Database(DbContextOptions<Database> options, IHttpContextAccessor httpContextAccessor, IConfiguration configuration) : DbContext(options) { public DbSet<Content> Content => Set<Content>(); public DbSet<Place> Places => Set<Place>(); - public DbSet<User> Users => Set<User>(); + public DbSet<User> Users => Set<User>(); public DbSet<AuditTrail> AuditTrails => Set<AuditTrail>(); protected override void OnModelCreating(ModelBuilder b) { @@ -20,22 +21,24 @@ public class Database(DbContextOptions<Database> options, IHttpContextAccessor h } public override int SaveChanges() { + if (configuration.GetValue<bool>("DISABLE_AUDIT_TRAILS")) return base.SaveChanges(); SetAuditableProperties(); - var auditEntries = HandleAuditingBeforeSaveChanges(); + var auditEntries = GetActiveAuditTrails(); if (auditEntries.Count != 0) AuditTrails.AddRange(auditEntries); return base.SaveChanges(); } public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default) { + if (configuration.GetValue<bool>("DISABLE_AUDIT_TRAILS")) return await base.SaveChangesAsync(cancellationToken); SetAuditableProperties(); - var auditEntries = HandleAuditingBeforeSaveChanges(); + var auditEntries = GetActiveAuditTrails(); if (auditEntries.Count != 0) await AuditTrails.AddRangeAsync(auditEntries, cancellationToken); return await base.SaveChangesAsync(cancellationToken); } - private List<AuditTrail> HandleAuditingBeforeSaveChanges() { + private List<AuditTrail> GetActiveAuditTrails() { var userId = GetUserId(); var entries = ChangeTracker.Entries<IAuditableEntity>() .Where(e => e.State is EntityState.Added or EntityState.Modified or EntityState.Deleted); @@ -56,7 +59,8 @@ public class Database(DbContextOptions<Database> options, IHttpContextAccessor h continue; } - if (prop.Metadata.Name.Equals("Password")) continue; + if (prop.Metadata.PropertyInfo?.CustomAttributes.FirstOrDefault(c => c.AttributeType == typeof(AuditTrailIgnoreAttribute)) != null) + continue; var name = prop.Metadata.Name; |
