From 6ebfe3072446624e807f45c3469c19bc79b1b3e4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 2 Aug 2021 19:12:23 +0800 Subject: [PATCH] Add AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker --- ...eEmailSettingsFeatureSimpleStateChecker.cs | 25 +++++++++++++++++++ ...gManagementPermissionDefinitionProvider.cs | 7 ++---- .../EmailSettingsAppService.cs | 13 ++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker.cs diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker.cs new file mode 100644 index 0000000000..30d6ffcf79 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker.cs @@ -0,0 +1,25 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Features; +using Volo.Abp.MultiTenancy; +using Volo.Abp.SimpleStateChecking; + +namespace Volo.Abp.SettingManagement +{ + public class AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker : ISimpleStateChecker + { + public async Task IsEnabledAsync(SimpleStateCheckerContext context) + { + var currentTenant = context.ServiceProvider.GetRequiredService(); + + if (!currentTenant.IsAvailable) + { + return true; + } + + var featureChecker = context.ServiceProvider.GetRequiredService(); + return await featureChecker.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + } + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs index cb4fbf1821..06ca852da1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs @@ -1,8 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Features; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.Localization; -using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement.Localization; namespace Volo.Abp.SettingManagement @@ -15,7 +12,7 @@ namespace Volo.Abp.SettingManagement moduleGroup .AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing")) - .RequireFeatures(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + .StateCheckers.Add(new AllowTenantsToChangeEmailSettingsFeatureSimpleStateChecker()); } private static LocalizableString L(string name) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs index fcddc93555..ca3297c87b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Emailing; using Volo.Abp.MultiTenancy; +using Volo.Abp.Features; namespace Volo.Abp.SettingManagement { @@ -18,6 +19,8 @@ namespace Volo.Abp.SettingManagement public virtual async Task GetAsync() { + await CheckFeatureAsync(); + var settingsDto = new EmailSettingsDto { SmtpHost = await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.Host), SmtpPort = Convert.ToInt32(await SettingProvider.GetOrNullAsync(EmailSettingNames.Smtp.Port)), @@ -43,6 +46,8 @@ namespace Volo.Abp.SettingManagement public virtual async Task UpdateAsync(UpdateEmailSettingsDto input) { + await CheckFeatureAsync(); + await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.Host, input.SmtpHost); await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.Port, input.SmtpPort.ToString()); await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.Smtp.UserName, input.SmtpUserName); @@ -53,5 +58,13 @@ namespace Volo.Abp.SettingManagement await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.DefaultFromAddress, input.DefaultFromAddress); await SettingManager.SetForTenantOrGlobalAsync(CurrentTenant.Id, EmailSettingNames.DefaultFromDisplayName, input.DefaultFromDisplayName); } + + private async Task CheckFeatureAsync() + { + if (CurrentTenant.IsAvailable) + { + await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + } + } } }