diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs index f44373cbda..40d7d452c5 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs @@ -20,6 +20,6 @@ public class UserDeletedEventHandler : public async Task HandleEventAsync(EntityDeletedEto eventData) { - await PermissionManager.DeleteAsync(UserPermissionValueProvider.ProviderName, eventData.Entity.Name); + await PermissionManager.DeleteAsync(UserPermissionValueProvider.ProviderName, eventData.Entity.Id.ToString()); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj index 2f911062df..cf94e76ffd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj @@ -13,6 +13,7 @@ + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs index 6e9c5704de..47a13dfd23 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.Emailing; using Volo.Abp.Modularity; using Volo.Abp.Timing; +using Volo.Abp.Users; namespace Volo.Abp.SettingManagement; @@ -10,7 +11,8 @@ namespace Volo.Abp.SettingManagement; typeof(AbpSettingManagementDomainModule), typeof(AbpSettingManagementApplicationContractsModule), typeof(AbpEmailingModule), - typeof(AbpTimingModule) + typeof(AbpTimingModule), + typeof(AbpUsersAbstractionModule) )] public class AbpSettingManagementApplicationModule : AbpModule { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/UserDeletedEventHandler.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/UserDeletedEventHandler.cs new file mode 100644 index 0000000000..1899ac62ae --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/UserDeletedEventHandler.cs @@ -0,0 +1,25 @@ +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Users; + +namespace Volo.Abp.SettingManagement; + +public class UserDeletedEventHandler : + IDistributedEventHandler>, + ITransientDependency +{ + protected ISettingManager SettingManager { get; } + + public UserDeletedEventHandler(ISettingManager settingManager) + { + SettingManager = settingManager; + } + + public async Task HandleEventAsync(EntityDeletedEto eventData) + { + await SettingManager.DeleteAsync(UserPermissionValueProvider.ProviderName, eventData.Entity.Id.ToString()); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs index a907ca2d66..9b718b01c1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs @@ -12,4 +12,6 @@ public interface ISettingManager Task> GetAllAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false); + + Task DeleteAsync(string providerName, string providerKey); } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs index 800f2140f5..5439c1213a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs @@ -13,6 +13,7 @@ public class SettingManager : ISettingManager, ISingletonDependency { protected ISettingDefinitionManager SettingDefinitionManager { get; } protected ISettingEncryptionService SettingEncryptionService { get; } + protected ISettingManagementStore SettingManagementStore { get; } protected List Providers => _lazyProviders.Value; protected SettingManagementOptions Options { get; } private readonly Lazy> _lazyProviders; @@ -21,10 +22,12 @@ public class SettingManager : ISettingManager, ISingletonDependency IOptions options, IServiceProvider serviceProvider, ISettingDefinitionManager settingDefinitionManager, - ISettingEncryptionService settingEncryptionService) + ISettingEncryptionService settingEncryptionService, + ISettingManagementStore settingManagementStore) { SettingDefinitionManager = settingDefinitionManager; SettingEncryptionService = settingEncryptionService; + SettingManagementStore = settingManagementStore; Options = options.Value; //TODO: Instead, use IServiceScopeFactory and create a scope..? @@ -160,6 +163,15 @@ public class SettingManager : ISettingManager, ISingletonDependency } } + public virtual async Task DeleteAsync(string providerName, string providerKey) + { + var settings = await SettingManagementStore.GetListAsync(providerName, providerKey); + foreach (var setting in settings) + { + await SettingManagementStore.DeleteAsync(setting.Name, providerName, providerKey); + } + } + protected virtual async Task GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true) { var setting = await SettingDefinitionManager.GetAsync(name); diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs index c99ff97ac1..b3f97688b1 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs @@ -186,4 +186,16 @@ public class SettingManager_User_Tests : SettingsTestBase (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User2Id)).ShouldBeNull(); //Does not inherit! (await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit")).ShouldBe("default-store-value"); } + + [Fact] + public async Task DeleteAsync() + { + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id)).ShouldBe("user1-store-value"); + + await _settingManager.DeleteAsync(UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()); + + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)).ShouldNotBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id)).ShouldNotBe("user1-store-value"); + } }