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 public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
{ {
protected ICurrentUser CurrentUser { get; } protected ICurrentUser CurrentUser { get; }
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected IClock Clock { get; } protected IClock Clock { get; }
public AuditPropertySetter( public AuditPropertySetter(
@ -23,7 +21,7 @@ namespace Volo.Abp.Auditing
Clock = clock; Clock = clock;
} }
public void SetCreationAuditProperties(object targetObject) public void SetCreationProperties(object targetObject)
{ {
if (!(targetObject is IHasCreationTime objectWithCreationTime)) if (!(targetObject is IHasCreationTime objectWithCreationTime))
{ {
@ -69,14 +67,14 @@ namespace Volo.Abp.Auditing
creationAuditedObject.CreatorId = CurrentUser.Id; 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; objectWithModificationTime.LastModificationTime = Clock.Now;
} }
if (!(auditedObject is IModificationAudited modificationAuditedObject)) if (!(targetObject is IModificationAudited modificationAuditedObject))
{ {
return; return;
} }
@ -107,5 +105,43 @@ namespace Volo.Abp.Auditing
modificationAuditedObject.LastModifierId = CurrentUser.Id; 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 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;
using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Metadata;
using Volo.Abp.Auditing;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Events; using Volo.Abp.Domain.Entities.Events;
@ -24,6 +25,7 @@ namespace Volo.Abp.EntityFrameworkCore
public Guid? CurrentTenantId => CurrentTenant?.Id; public Guid? CurrentTenantId => CurrentTenant?.Id;
protected virtual bool IsMayHaveTenantFilterEnabled => DataFilter.IsEnabled<IMultiTenant>(); protected virtual bool IsMayHaveTenantFilterEnabled => DataFilter.IsEnabled<IMultiTenant>();
protected virtual bool IsSoftDeleteFilterEnabled => DataFilter.IsEnabled<ISoftDelete>(); protected virtual bool IsSoftDeleteFilterEnabled => DataFilter.IsEnabled<ISoftDelete>();
public ICurrentTenant CurrentTenant { get; set; } public ICurrentTenant CurrentTenant { get; set; }
@ -34,6 +36,8 @@ namespace Volo.Abp.EntityFrameworkCore
public IEntityChangeEventHelper EntityChangeEventHelper { get; set; } 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); private static readonly MethodInfo ConfigureGlobalFiltersMethodInfo = typeof(AbpDbContext<TDbContext>).GetMethod(nameof(ConfigureGlobalFilters), BindingFlags.Instance | BindingFlags.NonPublic);
protected AbpDbContext(DbContextOptions<TDbContext> options) protected AbpDbContext(DbContextOptions<TDbContext> options)
@ -149,15 +153,18 @@ namespace Volo.Abp.EntityFrameworkCore
protected virtual void ApplyAbpConceptsForAddedEntity(EntityEntry entry, EntityChangeReport changeReport) protected virtual void ApplyAbpConceptsForAddedEntity(EntityEntry entry, EntityChangeReport changeReport)
{ {
CheckAndSetId(entry); CheckAndSetId(entry);
SetCreationAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Created)); changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Created));
} }
protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry, EntityChangeReport changeReport) protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry, EntityChangeReport changeReport)
{ {
HandleConcurrencyStamp(entry); HandleConcurrencyStamp(entry);
SetModificationAuditProperties(entry);
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted) if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{ {
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted)); changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
} }
else else
@ -170,6 +177,7 @@ namespace Volo.Abp.EntityFrameworkCore
{ {
CancelDeletionForSoftDelete(entry); CancelDeletionForSoftDelete(entry);
HandleConcurrencyStamp(entry); HandleConcurrencyStamp(entry);
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted)); 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) protected void ConfigureGlobalFilters<TEntity>(ModelBuilder modelBuilder, IMutableEntityType entityType)
where TEntity : class 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] [Fact]
public void Should_Do_Nothing_For_Non_Audited_Entity() public void Should_Do_Nothing_For_Non_Audited_Entity()
{ {
AuditPropertySetter.SetCreationAuditProperties(new MyEmptyObject()); AuditPropertySetter.SetCreationProperties(new MyEmptyObject());
} }
[Fact] [Fact]
public void Should_Set_CreationTime() public void Should_Set_CreationTime()
{ {
AuditPropertySetter.SetCreationAuditProperties(TargetObject); AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreationTime.ShouldBe(Now);
} }
@ -23,7 +23,7 @@ namespace Volo.Abp.Auditing
[Fact] [Fact]
public void Should_Not_Set_CreatorId_If_Current_User_Is_Not_Available() public void Should_Not_Set_CreatorId_If_Current_User_Is_Not_Available()
{ {
AuditPropertySetter.SetCreationAuditProperties(TargetObject); AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(null); TargetObject.CreatorId.ShouldBe(null);
@ -34,7 +34,7 @@ namespace Volo.Abp.Auditing
{ {
CurrentUserId = Guid.NewGuid(); CurrentUserId = Guid.NewGuid();
AuditPropertySetter.SetCreationAuditProperties(TargetObject); AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(CurrentUserId); TargetObject.CreatorId.ShouldBe(CurrentUserId);
@ -48,7 +48,7 @@ namespace Volo.Abp.Auditing
CurrentUserId = Guid.NewGuid(); CurrentUserId = Guid.NewGuid();
TargetObject.CreatorId = oldCreatorUserId; TargetObject.CreatorId = oldCreatorUserId;
AuditPropertySetter.SetCreationAuditProperties(TargetObject); AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(oldCreatorUserId); TargetObject.CreatorId.ShouldBe(oldCreatorUserId);
@ -63,7 +63,7 @@ namespace Volo.Abp.Auditing
CurrentUserTenantId = CurrentTenantId; CurrentUserTenantId = CurrentTenantId;
TargetObject.TenantId = CurrentTenantId; TargetObject.TenantId = CurrentTenantId;
AuditPropertySetter.SetCreationAuditProperties(TargetObject); AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(CurrentUserId); TargetObject.CreatorId.ShouldBe(CurrentUserId);
@ -78,7 +78,7 @@ namespace Volo.Abp.Auditing
CurrentUserTenantId = CurrentTenantId; CurrentUserTenantId = CurrentTenantId;
TargetObject.TenantId = Guid.NewGuid(); TargetObject.TenantId = Guid.NewGuid();
AuditPropertySetter.SetCreationAuditProperties(TargetObject); AuditPropertySetter.SetCreationProperties(TargetObject);
TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreationTime.ShouldBe(Now);
TargetObject.CreatorId.ShouldBe(null); 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] [Fact]
public void Should_Do_Nothing_For_Non_Audited_Entity() public void Should_Do_Nothing_For_Non_Audited_Entity()
{ {
AuditPropertySetter.SetModificationAuditProperties(new MyEmptyObject()); AuditPropertySetter.SetModificationProperties(new MyEmptyObject());
} }
[Fact] [Fact]
public void Should_Set_LastModificationTime() public void Should_Set_LastModificationTime()
{ {
AuditPropertySetter.SetModificationAuditProperties(TargetObject); AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now); TargetObject.LastModificationTime.ShouldBe(Now);
} }
@ -25,7 +25,7 @@ namespace Volo.Abp.Auditing
{ {
TargetObject.LastModifierId = Guid.NewGuid(); TargetObject.LastModifierId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject); AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now); TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(null); TargetObject.LastModifierId.ShouldBe(null);
@ -36,7 +36,7 @@ namespace Volo.Abp.Auditing
{ {
CurrentUserId = Guid.NewGuid(); CurrentUserId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject); AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now); TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(CurrentUserId); TargetObject.LastModifierId.ShouldBe(CurrentUserId);
@ -48,7 +48,7 @@ namespace Volo.Abp.Auditing
CurrentUserId = Guid.NewGuid(); CurrentUserId = Guid.NewGuid();
TargetObject.LastModifierId = Guid.NewGuid(); TargetObject.LastModifierId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject); AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now); TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(CurrentUserId); TargetObject.LastModifierId.ShouldBe(CurrentUserId);
@ -63,7 +63,7 @@ namespace Volo.Abp.Auditing
CurrentUserTenantId = CurrentTenantId; CurrentUserTenantId = CurrentTenantId;
TargetObject.TenantId = CurrentTenantId; TargetObject.TenantId = CurrentTenantId;
AuditPropertySetter.SetModificationAuditProperties(TargetObject); AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now); TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(CurrentUserId); TargetObject.LastModifierId.ShouldBe(CurrentUserId);
@ -78,7 +78,7 @@ namespace Volo.Abp.Auditing
TargetObject.TenantId = Guid.NewGuid(); TargetObject.TenantId = Guid.NewGuid();
TargetObject.LastModifierId = Guid.NewGuid(); TargetObject.LastModifierId = Guid.NewGuid();
AuditPropertySetter.SetModificationAuditProperties(TargetObject); AuditPropertySetter.SetModificationProperties(TargetObject);
TargetObject.LastModificationTime.ShouldBe(Now); TargetObject.LastModificationTime.ShouldBe(Now);
TargetObject.LastModifierId.ShouldBe(null); TargetObject.LastModifierId.ShouldBe(null);

Loading…
Cancel
Save