From 835e5466c0e62377d948ed9deece0be00bc46e36 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Tue, 8 Sep 2020 22:20:24 +0800 Subject: [PATCH] Refactor --- .../Volo/Abp/Features/AbpFeaturesModule.cs | 1 - .../Abp/Features/HostFeatureValueProvider.cs | 30 ---------- .../FeatureManagement/FeatureAppService.cs | 33 +++++++---- .../Localization/Domain/en.json | 1 - .../Localization/Domain/tr.json | 1 - .../Localization/Domain/zh-Hans.json | 1 - .../Localization/Domain/zh-Hant.json | 1 - .../AbpFeatureManagementDomainModule.cs | 3 - .../HostFeatureManagementProvider.cs | 59 ------------------- .../Pages/TenantManagement/Tenants/Index.js | 2 +- 10 files changed, 21 insertions(+), 111 deletions(-) delete mode 100644 framework/src/Volo.Abp.Features/Volo/Abp/Features/HostFeatureValueProvider.cs delete mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/HostFeatureManagementProvider.cs diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs index 7db32231e0..f30017feed 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs @@ -26,7 +26,6 @@ namespace Volo.Abp.Features context.Services.Configure(options => { options.ValueProviders.Add(); - options.ValueProviders.Add(); options.ValueProviders.Add(); options.ValueProviders.Add(); }); diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/HostFeatureValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/HostFeatureValueProvider.cs deleted file mode 100644 index d895813e6f..0000000000 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/HostFeatureValueProvider.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Features -{ - public class HostFeatureValueProvider : FeatureValueProvider - { - public const string ProviderName = "H"; - - public override string Name => ProviderName; - - protected ICurrentTenant CurrentTenant { get; } - - public HostFeatureValueProvider(IFeatureStore featureStore, ICurrentTenant currentTenant) - : base(featureStore) - { - CurrentTenant = currentTenant; - } - - public override async Task GetOrNullAsync(FeatureDefinition feature) - { - if (CurrentTenant.Id.HasValue || !feature.IsAvailableToHost) - { - return null; - } - - return await FeatureStore.GetOrNullAsync(feature.Name, Name, null); - } - } -} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs index 5c19df8751..6f0fe4815e 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.FeatureManagement public virtual async Task GetAsync([NotNull] string providerName, string providerKey) { - await CheckProviderPolicy(providerName); + await CheckProviderPolicy(providerName, providerKey); var result = new GetFeatureListResultDto { @@ -46,7 +46,10 @@ namespace Volo.Abp.FeatureManagement foreach (var featureDefinition in group.GetFeaturesWithChildren()) { - if (providerName == HostFeatureValueProvider.ProviderName && !featureDefinition.IsAvailableToHost) + if (providerName == TenantFeatureValueProvider.ProviderName && + CurrentTenant.Id == null && + providerKey == null && + !featureDefinition.IsAvailableToHost) { continue; } @@ -78,16 +81,10 @@ namespace Volo.Abp.FeatureManagement public virtual async Task UpdateAsync([NotNull] string providerName, string providerKey, UpdateFeaturesDto input) { - await CheckProviderPolicy(providerName); + await CheckProviderPolicy(providerName, providerKey); foreach (var feature in input.Features) { - var featureDefinition = FeatureDefinitionManager.GetOrNull(feature.Name); - if (featureDefinition == null || (providerName == HostFeatureValueProvider.ProviderName && !featureDefinition.IsAvailableToHost)) - { - throw new UserFriendlyException(L["FeatureNotAvailable"]); - } - await FeatureManager.SetAsync(feature.Name, feature.Value, providerName, providerKey); } } @@ -105,12 +102,22 @@ namespace Volo.Abp.FeatureManagement } } - protected virtual async Task CheckProviderPolicy(string providerName) + protected virtual async Task CheckProviderPolicy(string providerName, string providerKey) { - var policyName = Options.ProviderPolicies.GetOrDefault(providerName); - if (policyName.IsNullOrEmpty()) + string policyName; + if (providerName == TenantFeatureValueProvider.ProviderName) { - throw new AbpException($"No policy defined to get/set permissions for the provider '{policyName}'. Use {nameof(FeatureManagementOptions)} to map the policy."); + policyName = CurrentTenant.Id == null && providerKey == null ? + "FeatureManagement.ManageHostFeatures" : + "AbpTenantManagement.Tenants.ManageFeatures"; + } + else + { + policyName = Options.ProviderPolicies.GetOrDefault(providerName); + if (policyName.IsNullOrEmpty()) + { + throw new AbpException($"No policy defined to get/set permissions for the provider '{policyName}'. Use {nameof(FeatureManagementOptions)} to map the policy."); + } } await AuthorizationService.CheckAsync(policyName); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json index 6e17e8fc48..26f5dc736b 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json @@ -3,7 +3,6 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "There isn't any available feature.", - "FeatureNotAvailable": "Feature not available.", "Permission:FeatureManagement": "Feature management", "Permission:FeatureManagement.ManageHostFeatures": "Manage Host features" } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json index 285b4143cf..8233674933 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json @@ -3,7 +3,6 @@ "texts": { "Features": "Özellikler", "NoFeatureFoundMessage": "Hiç özellik yok.", - "FeatureNotAvailable": "Özellik bulunamadı.", "Permission:FeatureManagement": "Özellik yönetimi", "Permission:FeatureManagement.ManageHostFeatures": "Host özelliklerini düzenle" } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json index 2ecdb3997b..9737a9a59c 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json @@ -3,7 +3,6 @@ "texts": { "Features": "功能", "NoFeatureFoundMessage": "没有可用的功能.", - "FeatureNotAvailable": "功能不可用.", "Permission:FeatureManagement": "特性管理", "Permission:FeatureManagement.ManageHostFeatures": "管理Host特性" } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json index 6a8ccd099b..7d68fd5bc2 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json @@ -3,7 +3,6 @@ "texts": { "Features": "功能", "NoFeatureFoundMessage": "沒有可用的功能.", - "FeatureNotAvailable": "功能不可用.", "Permission:FeatureManagement": "功能管理", "Permission:FeatureManagement.ManageHostFeatures": "管理Host功能" } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs index b9992309dd..34a0e198c7 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs @@ -18,13 +18,10 @@ namespace Volo.Abp.FeatureManagement Configure(options => { options.Providers.Add(); - options.Providers.Add(); - options.ProviderPolicies[HostFeatureValueProvider.ProviderName] = "FeatureManagement.ManageHostFeatures"; options.Providers.Add(); //TODO: Should be moved to the Tenant Management module options.Providers.Add(); - options.ProviderPolicies[TenantFeatureValueProvider.ProviderName] = "AbpTenantManagement.Tenants.ManageFeatures"; }); Configure(options => diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/HostFeatureManagementProvider.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/HostFeatureManagementProvider.cs deleted file mode 100644 index d40d2dfdec..0000000000 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/HostFeatureManagementProvider.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Features; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.FeatureManagement -{ - public class HostFeatureManagementProvider : FeatureManagementProvider, ITransientDependency - { - public override string Name => HostFeatureValueProvider.ProviderName; - - protected ICurrentTenant CurrentTenant { get; } - - public HostFeatureManagementProvider( - IFeatureManagementStore store, - ICurrentTenant currentTenant) - : base(store) - { - CurrentTenant = currentTenant; - } - - public override async Task GetOrNullAsync(FeatureDefinition feature, string providerKey) - { - if (IsHostSide(feature)) - { - return await Store.GetOrNullAsync(feature.Name, Name, NormalizeProviderKey(providerKey)); - } - - return null; - } - - public override async Task SetAsync(FeatureDefinition feature, string value, string providerKey) - { - if (IsHostSide(feature)) - { - await Store.SetAsync(feature.Name, value, Name, NormalizeProviderKey(providerKey)); - } - } - - public override async Task ClearAsync(FeatureDefinition feature, string providerKey) - { - if (IsHostSide(feature)) - { - await Store.DeleteAsync(feature.Name, Name, NormalizeProviderKey(providerKey)); - } - } - - protected override string NormalizeProviderKey(string providerKey) - { - return null; - } - - //TODO: Should throw an ex when there is not in the host side? - protected virtual bool IsHostSide(FeatureDefinition feature) - { - return feature.IsAvailableToHost && CurrentTenant.Id == null; - } - } -} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js index ecb2309f36..69bbb0b955 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js @@ -132,7 +132,7 @@ _$wrapper.find('button[name=ManageHostFeatures]').click(function (e) { e.preventDefault(); _featuresModal.open({ - providerName: 'H' + providerName: 'T' }); }); });