From 2d55efd78bfb0803433cf4d2532e1aee862199f1 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 30 Jul 2021 17:07:43 +0800 Subject: [PATCH] Provide a feature to allow tenants to change email settings --- ...gManagementPermissionDefinitionProvider.cs | 18 +++++++++++++-- .../Settings/EmailingPageContributor.cs | 22 +++++++++++++++++++ .../Resources/AbpSettingManagement/en.json | 4 +++- .../AbpSettingManagement/zh-Hans.json | 4 +++- ...tingManagementFeatureDefinitionProvider.cs | 13 +++++++++-- .../SettingManagementFeatures.cs | 2 ++ .../Settings/EmailingPageContributor.cs | 22 +++++++++++++++++++ 7 files changed, 79 insertions(+), 6 deletions(-) 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 7550c44c6a..faf71064b7 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,4 +1,6 @@ -using Volo.Abp.Authorization.Permissions; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Features; using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement.Localization; @@ -10,12 +12,24 @@ namespace Volo.Abp.SettingManagement public override void Define(IPermissionDefinitionContext context) { var moduleGroup = context.AddGroup(SettingManagementPermissions.GroupName, L("Permission:SettingManagement")); - moduleGroup.AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing"), multiTenancySide: MultiTenancySides.Host); + var emailingPermission = moduleGroup.AddPermission(SettingManagementPermissions.Emailing, L("Permission:Emailing")); + + if (IsTenantAvailable(context)) + { + emailingPermission.RequireFeatures(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + } } private static LocalizableString L(string name) { return LocalizableString.Create(name); } + + private static bool IsTenantAvailable(IPermissionDefinitionContext context) + { + var currentTenant = context.ServiceProvider.GetRequiredService(); + + return currentTenant.IsAvailable; + } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailingPageContributor.cs index 5176c393c7..e0336bda4d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailingPageContributor.cs @@ -2,6 +2,8 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; +using Volo.Abp.Features; +using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; using Volo.Abp.SettingManagement.Localization; @@ -33,9 +35,29 @@ namespace Volo.Abp.SettingManagement.Blazor.Settings private async Task CheckPermissionsInternalAsync(SettingComponentCreationContext context) { + if (!await CheckFeatureAsync(context)) + { + return false; + } + var authorizationService = context.ServiceProvider.GetRequiredService(); return await authorizationService.IsGrantedAsync(SettingManagementPermissions.Emailing); } + + private async Task CheckFeatureAsync(SettingComponentCreationContext context) + { + var currentTenant = context.ServiceProvider.GetRequiredService(); + + if (!currentTenant.IsAvailable) + { + return true; + } + + var featureCheck = context.ServiceProvider.GetRequiredService(); + + return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + + } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json index a58714bf0f..bec50ed27e 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json @@ -17,6 +17,8 @@ "DefaultFromDisplayName": "Default from display name", "Feature:SettingManagementGroup": "Setting Management", "Feature:SettingManagementEnable": "Enable setting management", - "Feature:SettingManagementEnableDescription": "Enable setting management system in the application." + "Feature:SettingManagementEnableDescription": "Enable setting management system in the application.", + "Feature:AllowTenantsToChangeEmailSettings": "Allow tenants to change email settings.", + "Feature:AllowTenantsToChangeEmailSettingsDescription": "Allow tenants to change email settings." } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json index b9763644c4..8606c7da83 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json @@ -17,6 +17,8 @@ "DefaultFromDisplayName": "默认显示名称", "Feature:SettingManagementGroup": "设置管理", "Feature:SettingManagementEnable": "启用设置管理", - "Feature:SettingManagementEnableDescription": "在应用程序中启用设置管理系统." + "Feature:SettingManagementEnableDescription": "在应用程序中启用设置管理系统.", + "Feature:AllowTenantsToChangeEmailSettings": "允许租户更改邮件设置.", + "Feature:AllowTenantsToChangeEmailSettingsDescription": "允许租户更改邮件设置." } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs index 19248e85b1..80a955bb23 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs @@ -5,18 +5,27 @@ using Volo.Abp.Validation.StringValues; namespace Volo.Abp.SettingManagement { - public class SettingManagementFeatureDefinitionProvider: FeatureDefinitionProvider + public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvider { public override void Define(IFeatureDefinitionContext context) { var group = context.AddGroup(SettingManagementFeatures.GroupName, L("Feature:SettingManagementGroup")); - group.AddFeature(SettingManagementFeatures.Enable, + var settingEnableFeature = group.AddFeature( + SettingManagementFeatures.Enable, "true", L("Feature:SettingManagementEnable"), L("Feature:SettingManagementEnableDescription"), new ToggleStringValueType()); + + settingEnableFeature.CreateChild( + SettingManagementFeatures.AllowTenantsToChangeEmailSettings, + "false", + L("Feature:AllowTenantsToChangeEmailSettings"), + L("AllowTenantsToChangeEmailSettingsDescription"), + new ToggleStringValueType(), + isAvailableToHost: false); } private static LocalizableString L(string name) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs index e478efc0e3..fd7578dc86 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs @@ -5,5 +5,7 @@ public const string GroupName = "SettingManagement"; public const string Enable = GroupName + ".Enable"; + + public const string AllowTenantsToChangeEmailSettings = GroupName + ".AllowTenantsToChangeEmailSettings"; } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs index e940d0467b..1cbb75428c 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs @@ -2,6 +2,8 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; +using Volo.Abp.Features; +using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement.Localization; using Volo.Abp.SettingManagement.Web.Pages.SettingManagement; using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; @@ -34,9 +36,29 @@ namespace Volo.Abp.SettingManagement.Web.Settings private async Task CheckPermissionsInternalAsync(SettingPageCreationContext context) { + if (!await CheckFeatureAsync(context)) + { + return false; + } + var authorizationService = context.ServiceProvider.GetRequiredService(); return await authorizationService.IsGrantedAsync(SettingManagementPermissions.Emailing); } + + private async Task CheckFeatureAsync(SettingPageCreationContext context) + { + var currentTenant = context.ServiceProvider.GetRequiredService(); + + if (!currentTenant.IsAvailable) + { + return true; + } + + var featureCheck = context.ServiceProvider.GetRequiredService(); + + return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + + } } }