Browse Source

Called AuditPropertySetter from AbpDbContext.

pull/272/head
Halil İbrahim Kalkan 9 years ago
parent
commit
15a10c0d09
  1. 48
      src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
  2. 6
      src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditPropertySetter.cs
  3. 23
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  4. 14
      test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_CreationAudit_Tests.cs
  5. 14
      test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_ModificationAudit_Tests.cs

48
src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs

@ -8,9 +8,7 @@ namespace Volo.Abp.Auditing
public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
{
protected ICurrentUser CurrentUser { get; }
protected ICurrentTenant CurrentTenant { get; }
protected IClock Clock { get; }
public AuditPropertySetter(
@ -23,7 +21,7 @@ namespace Volo.Abp.Auditing
Clock = clock;
}
public void SetCreationAuditProperties(object targetObject)
public void SetCreationProperties(object targetObject)
{
if (!(targetObject is IHasCreationTime objectWithCreationTime))
{
@ -69,14 +67,14 @@ namespace Volo.Abp.Auditing
creationAuditedObject.CreatorId = CurrentUser.Id;
}
public void SetModificationAuditProperties(object auditedObject)
public void SetModificationProperties(object targetObject)
{
if (auditedObject is IHasModificationTime objectWithModificationTime)
if (targetObject is IHasModificationTime objectWithModificationTime)
{
objectWithModificationTime.LastModificationTime = Clock.Now;
}
if (!(auditedObject is IModificationAudited modificationAuditedObject))
if (!(targetObject is IModificationAudited modificationAuditedObject))
{
return;
}
@ -107,5 +105,43 @@ namespace Volo.Abp.Auditing
modificationAuditedObject.LastModifierId = CurrentUser.Id;
}
public void SetDeletionProperties(object targetObject)
{
if (targetObject is IHasDeletionTime objectWithDeletionTime)
{
if (objectWithDeletionTime.DeletionTime == null)
{
objectWithDeletionTime.DeletionTime = Clock.Now;
}
}
if (!(targetObject is IDeletionAudited deletionAuditedObject))
{
return;
}
if (deletionAuditedObject.DeleterId != null)
{
return;
}
if (!CurrentUser.Id.HasValue)
{
deletionAuditedObject.DeleterId = null;
return;
}
if (deletionAuditedObject is IMultiTenant multiTenantEntity)
{
if (multiTenantEntity.TenantId != CurrentUser.TenantId)
{
deletionAuditedObject.DeleterId = null;
return;
}
}
deletionAuditedObject.DeleterId = CurrentUser.Id;
}
}
}

6
src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditPropertySetter.cs

@ -2,8 +2,10 @@
{
public interface IAuditPropertySetter
{
void SetCreationAuditProperties(object targetObject);
void SetCreationProperties(object targetObject);
void SetModificationAuditProperties(object auditedObject);
void SetModificationProperties(object targetObject);
void SetDeletionProperties(object targetObject);
}
}

23
src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Metadata;
using Volo.Abp.Auditing;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Events;
@ -24,6 +25,7 @@ namespace Volo.Abp.EntityFrameworkCore
public Guid? CurrentTenantId => CurrentTenant?.Id;
protected virtual bool IsMayHaveTenantFilterEnabled => DataFilter.IsEnabled<IMultiTenant>();
protected virtual bool IsSoftDeleteFilterEnabled => DataFilter.IsEnabled<ISoftDelete>();
public ICurrentTenant CurrentTenant { get; set; }
@ -34,6 +36,8 @@ namespace Volo.Abp.EntityFrameworkCore
public IEntityChangeEventHelper EntityChangeEventHelper { get; set; }
public IAuditPropertySetter AuditPropertySetter { get; set; }
private static readonly MethodInfo ConfigureGlobalFiltersMethodInfo = typeof(AbpDbContext<TDbContext>).GetMethod(nameof(ConfigureGlobalFilters), BindingFlags.Instance | BindingFlags.NonPublic);
protected AbpDbContext(DbContextOptions<TDbContext> options)
@ -149,15 +153,18 @@ namespace Volo.Abp.EntityFrameworkCore
protected virtual void ApplyAbpConceptsForAddedEntity(EntityEntry entry, EntityChangeReport changeReport)
{
CheckAndSetId(entry);
SetCreationAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Created));
}
protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry, EntityChangeReport changeReport)
{
HandleConcurrencyStamp(entry);
SetModificationAuditProperties(entry);
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
}
else
@ -170,6 +177,7 @@ namespace Volo.Abp.EntityFrameworkCore
{
CancelDeletionForSoftDelete(entry);
HandleConcurrencyStamp(entry);
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
}
@ -231,6 +239,21 @@ namespace Volo.Abp.EntityFrameworkCore
}
}
protected virtual void SetCreationAuditProperties(EntityEntry entry)
{
AuditPropertySetter.SetCreationProperties(entry.Entity);
}
protected virtual void SetModificationAuditProperties(EntityEntry entry)
{
AuditPropertySetter.SetModificationProperties(entry.Entity);
}
protected virtual void SetDeletionAuditProperties(EntityEntry entry)
{
AuditPropertySetter.SetDeletionProperties(entry.Entity);
}
protected void ConfigureGlobalFilters<TEntity>(ModelBuilder modelBuilder, IMutableEntityType entityType)
where TEntity : class
{

14
test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_CreationAudit_Tests.cs

@ -9,13 +9,13 @@ namespace Volo.Abp.Auditing
[Fact]
public void Should_Do_Nothing_For_Non_Audited_Entity()
{
AuditPropertySetter.SetCreationAuditProperties(new MyEmptyObject());
AuditPropertySetter.SetCreationProperties(new MyEmptyObject());
}
[Fact]
public void Should_Set_CreationTime()
{
AuditPropertySetter.SetCreationAuditProperties(TargetObject);
AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now);
}
@ -23,7 +23,7 @@ namespace Volo.Abp.Auditing
[Fact]
public void Should_Not_Set_CreatorId_If_Current_User_Is_Not_Available()
{
AuditPropertySetter.SetCreationAuditProperties(TargetObject);
AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(null);
@ -34,7 +34,7 @@ namespace Volo.Abp.Auditing
{
CurrentUserId = Guid.NewGuid();
AuditPropertySetter.SetCreationAuditProperties(TargetObject);
AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(CurrentUserId);
@ -48,7 +48,7 @@ namespace Volo.Abp.Auditing
CurrentUserId = Guid.NewGuid();
TargetObject.CreatorId = oldCreatorUserId;
AuditPropertySetter.SetCreationAuditProperties(TargetObject);
AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(oldCreatorUserId);
@ -63,7 +63,7 @@ namespace Volo.Abp.Auditing
CurrentUserTenantId = CurrentTenantId;
TargetObject.TenantId = CurrentTenantId;
AuditPropertySetter.SetCreationAuditProperties(TargetObject);
AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(CurrentUserId);
@ -78,7 +78,7 @@ namespace Volo.Abp.Auditing
CurrentUserTenantId = CurrentTenantId;
TargetObject.TenantId = Guid.NewGuid();
AuditPropertySetter.SetCreationAuditProperties(TargetObject);
AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(null);

14
test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_ModificationAudit_Tests.cs

@ -9,13 +9,13 @@ namespace Volo.Abp.Auditing
[Fact]
public void Should_Do_Nothing_For_Non_Audited_Entity()
{
AuditPropertySetter.SetModificationAuditProperties(new MyEmptyObject());
AuditPropertySetter.SetModificationProperties(new MyEmptyObject());
}
[Fact]
public void Should_Set_LastModificationTime()
{
AuditPropertySetter.SetModificationAuditProperties(TargetObject);
AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now);
}
@ -25,7 +25,7 @@ namespace Volo.Abp.Auditing
{
TargetObject.LastModifierId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject);
AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(null);
@ -36,7 +36,7 @@ namespace Volo.Abp.Auditing
{
CurrentUserId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject);
AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(CurrentUserId);
@ -48,7 +48,7 @@ namespace Volo.Abp.Auditing
CurrentUserId = Guid.NewGuid();
TargetObject.LastModifierId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject);
AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(CurrentUserId);
@ -63,7 +63,7 @@ namespace Volo.Abp.Auditing
CurrentUserTenantId = CurrentTenantId;
TargetObject.TenantId = CurrentTenantId;
AuditPropertySetter.SetModificationAuditProperties(TargetObject);
AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(CurrentUserId);
@ -78,7 +78,7 @@ namespace Volo.Abp.Auditing
TargetObject.TenantId = Guid.NewGuid();
TargetObject.LastModifierId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject);
AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(null);

Loading…
Cancel
Save