diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs new file mode 100644 index 0000000000..c0b1dea34f --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Identity; + +[Serializable] +public class IdentityUserEmailChangedEto : IMultiTenant +{ + public Guid Id { get; set; } + + public Guid? TenantId { get; set; } + + public string Email { get; set; } + + public string OldEmail { get; set; } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs new file mode 100644 index 0000000000..3f86845dca --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Identity; + +[Serializable] +public class IdentityUserUserNameChangedEto : IMultiTenant +{ + public Guid Id { get; set; } + public Guid? TenantId { get; set; } + public string UserName { get; set; } + public string OldUserName { get; set; } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs index cdbb289597..46f23d2866 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; +using Volo.Abp.EventBus.Distributed; using Volo.Abp.Identity.Settings; using Volo.Abp.Settings; using Volo.Abp.Threading; @@ -25,6 +26,7 @@ public class IdentityUserManager : UserManager, IDomainService protected IOrganizationUnitRepository OrganizationUnitRepository { get; } protected ISettingProvider SettingProvider { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } + protected IDistributedEventBus DistributedEventBus { get; } protected override CancellationToken CancellationToken => CancellationTokenProvider.Token; @@ -42,7 +44,8 @@ public class IdentityUserManager : UserManager, IDomainService ILogger logger, ICancellationTokenProvider cancellationTokenProvider, IOrganizationUnitRepository organizationUnitRepository, - ISettingProvider settingProvider) + ISettingProvider settingProvider, + IDistributedEventBus distributedEventBus) : base( store, optionsAccessor, @@ -56,6 +59,7 @@ public class IdentityUserManager : UserManager, IDomainService { OrganizationUnitRepository = organizationUnitRepository; SettingProvider = settingProvider; + DistributedEventBus = distributedEventBus; RoleRepository = roleRepository; UserRepository = userRepository; CancellationTokenProvider = cancellationTokenProvider; @@ -285,4 +289,43 @@ public class IdentityUserManager : UserManager, IDomainService await identityUserStore.SetTokenAsync(user, await identityUserStore.GetInternalLoginProviderAsync(), await identityUserStore.GetRecoveryCodeTokenNameAsync(), string.Empty, CancellationToken); } + + public async override Task SetEmailAsync(IdentityUser user, string email) + { + var oldMail = user.Email; + + var result = await base.SetEmailAsync(user, email); + + result.CheckErrors(); + + await DistributedEventBus.PublishAsync( + new IdentityUserEmailChangedEto + { + Id = user.Id, + TenantId = user.TenantId, + Email = email, + OldEmail = oldMail + }); + + return result; + } + + public async override Task SetUserNameAsync(IdentityUser user, string userName) + { + var oldUserName = user.UserName; + + var result = await base.SetUserNameAsync(user, userName); + + result.CheckErrors(); + + await DistributedEventBus.PublishAsync( + new IdentityUserUserNameChangedEto { + Id = user.Id, + TenantId = user.TenantId, + UserName = userName, + OldUserName = oldUserName + }); + + return result; + } }