diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs index 534ca68d80..08a8c4c873 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs @@ -15,6 +15,10 @@ public class CurrentUserDto public Guid? ImpersonatorTenantId { get; set; } + public string ImpersonatorUserName { get; set; } + + public string ImpersonatorTenantName { get; set; } + public string UserName { get; set; } public string Name { get; set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index ea517463fe..6ecd9fc195 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -129,6 +129,8 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp TenantId = _currentUser.TenantId, ImpersonatorUserId = _currentUser.FindImpersonatorUserId(), ImpersonatorTenantId = _currentUser.FindImpersonatorTenantId(), + ImpersonatorUserName = _currentUser.FindImpersonatorUserName(), + ImpersonatorTenantName = _currentUser.FindImpersonatorTenantName(), UserName = _currentUser.UserName, SurName = _currentUser.SurName, Name = _currentUser.Name, diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditLogInfo.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditLogInfo.cs index f8fcbeef5e..4df472da24 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditLogInfo.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditLogInfo.cs @@ -23,6 +23,10 @@ public class AuditLogInfo : IHasExtraProperties public Guid? ImpersonatorTenantId { get; set; } + public string ImpersonatorUserName { get; set; } + + public string ImpersonatorTenantName { get; set; } + public DateTime ExecutionTime { get; set; } public int ExecutionDuration { get; set; } diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs index 934bf42583..1f3c6b433c 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs @@ -136,9 +136,11 @@ public class AuditingHelper : IAuditingHelper, ITransientDependency UserName = CurrentUser.UserName, ClientId = CurrentClient.Id, CorrelationId = CorrelationIdProvider.Get(), + ExecutionTime = Clock.Now, ImpersonatorUserId = CurrentUser.FindImpersonatorUserId(), + ImpersonatorUserName = CurrentUser.FindImpersonatorUserName(), ImpersonatorTenantId = CurrentUser.FindImpersonatorTenantId(), - ExecutionTime = Clock.Now + ImpersonatorTenantName = CurrentUser.FindImpersonatorTenantName(), }; ExecutePreContributors(auditInfo); diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs index 034336a9d9..5e534226a1 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs @@ -77,4 +77,14 @@ public static class AbpClaimTypes /// Default: "impersonator_userid". /// public static string ImpersonatorUserId { get; set; } = "impersonator_userid"; + + /// + /// Default: "impersonator_tenantname". + /// + public static string ImpersonatorTenantName { get; set; } = "impersonator_tenantname"; + + /// + /// Default: "impersonator_username". + /// + public static string ImpersonatorUserName { get; set; } = "impersonator_username"; } diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs index 78fd42ab76..7e10df87c6 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs @@ -35,7 +35,7 @@ public static class CurrentUserExtensions public static Guid? FindImpersonatorTenantId([NotNull] this ICurrentUser currentUser) { var impersonatorTenantId = currentUser.FindClaimValue(AbpClaimTypes.ImpersonatorTenantId); - if (impersonatorTenantId == null || impersonatorTenantId.IsNullOrWhiteSpace()) + if (impersonatorTenantId.IsNullOrWhiteSpace()) { return null; } @@ -50,7 +50,7 @@ public static class CurrentUserExtensions public static Guid? FindImpersonatorUserId([NotNull] this ICurrentUser currentUser) { var impersonatorUserId = currentUser.FindClaimValue(AbpClaimTypes.ImpersonatorUserId); - if (impersonatorUserId == null || impersonatorUserId.IsNullOrWhiteSpace()) + if (impersonatorUserId.IsNullOrWhiteSpace()) { return null; } @@ -61,4 +61,14 @@ public static class CurrentUserExtensions return null; } + + public static string FindImpersonatorTenantName([NotNull] this ICurrentUser currentUser) + { + return currentUser.FindClaimValue(AbpClaimTypes.ImpersonatorTenantName); + } + + public static string FindImpersonatorUserName([NotNull] this ICurrentUser currentUser) + { + return currentUser.FindClaimValue(AbpClaimTypes.ImpersonatorUserName); + } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs index ac7df6a47f..55dc191fa7 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs @@ -24,8 +24,12 @@ public class AuditLog : AggregateRoot, IMultiTenant public virtual Guid? ImpersonatorUserId { get; protected set; } + public virtual string ImpersonatorUserName { get; protected set; } + public virtual Guid? ImpersonatorTenantId { get; protected set; } + public virtual string ImpersonatorTenantName { get; protected set; } + public virtual DateTime ExecutionTime { get; protected set; } public virtual int ExecutionDuration { get; protected set; } @@ -77,7 +81,9 @@ public class AuditLog : AggregateRoot, IMultiTenant string url, int? httpStatusCode, Guid? impersonatorUserId, + string impersonatorUserName, Guid? impersonatorTenantId, + string impersonatorTenantName, ExtraPropertyDictionary extraPropertyDictionary, List entityChanges, List actions, @@ -101,8 +107,9 @@ public class AuditLog : AggregateRoot, IMultiTenant Url = url.Truncate(AuditLogConsts.MaxUrlLength); HttpStatusCode = httpStatusCode; ImpersonatorUserId = impersonatorUserId; + ImpersonatorUserName = impersonatorUserName; ImpersonatorTenantId = impersonatorTenantId; - + ImpersonatorTenantName = impersonatorTenantName; ExtraProperties = extraPropertyDictionary; EntityChanges = entityChanges; Actions = actions; diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs index 20f5a3629f..6f2b276df3 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs @@ -79,7 +79,9 @@ public class AuditLogInfoToAuditLogConverter : IAuditLogInfoToAuditLogConverter, auditLogInfo.Url, auditLogInfo.HttpStatusCode, auditLogInfo.ImpersonatorUserId, + auditLogInfo.ImpersonatorUserName, auditLogInfo.ImpersonatorTenantId, + auditLogInfo.ImpersonatorTenantName, extraProperties, entityChanges, actions, diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs index 1c17a374ce..d3ef7abe91 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs @@ -31,6 +31,8 @@ public static class AbpAuditLoggingDbContextModelBuilderExtensions b.Property(x => x.ExecutionDuration).HasColumnName(nameof(AuditLog.ExecutionDuration)); b.Property(x => x.ImpersonatorTenantId).HasColumnName(nameof(AuditLog.ImpersonatorTenantId)); b.Property(x => x.ImpersonatorUserId).HasColumnName(nameof(AuditLog.ImpersonatorUserId)); + b.Property(x => x.ImpersonatorTenantName).HasColumnName(nameof(AuditLog.ImpersonatorTenantName)); + b.Property(x => x.ImpersonatorUserName).HasColumnName(nameof(AuditLog.ImpersonatorUserName)); b.Property(x => x.UserId).HasColumnName(nameof(AuditLog.UserId)); b.Property(x => x.UserName).HasMaxLength(AuditLogConsts.MaxUserNameLength).HasColumnName(nameof(AuditLog.UserName)); b.Property(x => x.TenantId).HasColumnName(nameof(AuditLog.TenantId)); diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index 0a56e3f398..17f365147d 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -36,6 +36,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -87,6 +89,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -140,6 +144,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -191,6 +197,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -242,6 +250,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.SpecifyKind(DateTime.Parse("2020-01-01 01:00:00"), DateTimeKind.Utc), ExecutionDuration = 45, ClientIpAddress = ipAddress, @@ -293,6 +303,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.SpecifyKind(DateTime.Parse("2020-01-01 03:00:00"), DateTimeKind.Utc), ExecutionDuration = 55, ClientIpAddress = ipAddress, @@ -346,6 +358,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -397,6 +411,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -452,6 +468,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -503,6 +521,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -559,6 +579,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -610,6 +632,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -673,6 +697,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -723,6 +749,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -780,6 +808,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -831,6 +861,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -893,6 +925,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -944,6 +978,8 @@ public abstract class AuditLogRepository_Tests : AuditLoggingTes UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs index 102456bc66..9174bfc6b9 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs @@ -35,6 +35,8 @@ public abstract class AuditStore_Basic_Tests : AuditLoggingTestB UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -90,6 +92,8 @@ public abstract class AuditStore_Basic_Tests : AuditLoggingTestB UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, @@ -141,6 +145,8 @@ public abstract class AuditStore_Basic_Tests : AuditLoggingTestB UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), + ImpersonatorTenantName = "default", + ImpersonatorUserName = "admin", ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress,