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 555ddbf495..b8b6c33d7c 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 @@ -34,6 +34,8 @@ namespace Volo.Abp.FeatureManagement public async Task GetAsync([NotNull] string providerName, [NotNull] string providerKey) { + await CheckProviderPolicy(providerName); + var featureDefinitions = _featureDefinitionManager.GetAll(); var features = new List(); @@ -56,6 +58,8 @@ namespace Volo.Abp.FeatureManagement public async Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateFeaturesDto input) { + await CheckProviderPolicy(providerName); + foreach (var feature in input.Features) { await _featureManager.SetAsync(feature.Name, feature.Value, providerName, providerKey); @@ -74,5 +78,16 @@ namespace Volo.Abp.FeatureManagement } } } + + protected virtual async Task CheckProviderPolicy(string providerName) + { + var 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/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs index 515db2b03f..54f5364c18 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 @@ -21,7 +21,6 @@ namespace Volo.Abp.FeatureManagement { options.Providers.Add(); options.Providers.Add(); - options.Providers.Add(); }); Configure(options => diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs index 0599c3e4c5..b671c475ec 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Collections; +using System.Collections.Generic; +using Volo.Abp.Collections; namespace Volo.Abp.FeatureManagement { @@ -6,9 +7,12 @@ namespace Volo.Abp.FeatureManagement { public ITypeList Providers { get; } + public Dictionary ProviderPolicies { get; } + public FeatureManagementOptions() { Providers = new TypeList(); + ProviderPolicies = new Dictionary(); } } } \ No newline at end of file diff --git a/modules/tenant-management/Volo.Abp.TenantManagement.sln b/modules/tenant-management/Volo.Abp.TenantManagement.sln index 20fd21a531..9e1f76c980 100644 --- a/modules/tenant-management/Volo.Abp.TenantManagement.sln +++ b/modules/tenant-management/Volo.Abp.TenantManagement.sln @@ -25,14 +25,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.W EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.Application.Tests", "test\Volo.Abp.TenantManagement.Application.Tests\Volo.Abp.TenantManagement.Application.Tests.csproj", "{72445B2D-07FA-4A35-A3D6-FF4ACE299BF4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.EntityFrameworkCore.Tests", "test\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj", "{A2BB8897-EBDB-46BB-B885-F8635B21F376}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.EntityFrameworkCore.Tests", "test\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj", "{A2BB8897-EBDB-46BB-B885-F8635B21F376}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.MongoDB", "src\Volo.Abp.TenantManagement.MongoDB\Volo.Abp.TenantManagement.MongoDB.csproj", "{ED95242E-3C31-4A89-9C62-93B306EFEB15}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.MongoDB", "src\Volo.Abp.TenantManagement.MongoDB\Volo.Abp.TenantManagement.MongoDB.csproj", "{ED95242E-3C31-4A89-9C62-93B306EFEB15}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.MongoDB.Tests", "test\Volo.Abp.TenantManagement.MongoDB.Tests\Volo.Abp.TenantManagement.MongoDB.Tests.csproj", "{F75B4C54-A5F1-4101-99F5-A5B868A5146B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.MongoDB.Tests", "test\Volo.Abp.TenantManagement.MongoDB.Tests\Volo.Abp.TenantManagement.MongoDB.Tests.csproj", "{F75B4C54-A5F1-4101-99F5-A5B868A5146B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.TestBase", "test\Volo.Abp.TenantManagement.TestBase\Volo.Abp.TenantManagement.TestBase.csproj", "{C3BAD6E8-00CD-4283-9416-64287BB5B265}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.FeatureManagement.Domain.TenantManagement", "src\Volo.Abp.FeatureManagement.Domain.TenantManagement\Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj", "{7A5E7998-62CF-418B-A452-0FCB4CB853CC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -91,6 +93,10 @@ Global {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Release|Any CPU.Build.0 = Release|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -109,6 +115,7 @@ Global {ED95242E-3C31-4A89-9C62-93B306EFEB15} = {799CA525-4748-421A-9892-05C68BB2FA13} {F75B4C54-A5F1-4101-99F5-A5B868A5146B} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {C3BAD6E8-00CD-4283-9416-64287BB5B265} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} + {7A5E7998-62CF-418B-A452-0FCB4CB853CC} = {799CA525-4748-421A-9892-05C68BB2FA13} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7C258726-2CE0-44D3-A2D7-71812E8F505C} diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj new file mode 100644 index 0000000000..94c6905fec --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp2.2 + + + + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs new file mode 100644 index 0000000000..ac698c913c --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs @@ -0,0 +1,18 @@ +using Volo.Abp.Features; +using Volo.Abp.Modularity; + +namespace Volo.Abp.FeatureManagement.TenantManagement +{ + public class AbpFeatureManagementDomainTenantManagementModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Providers.Add(); + + options.ProviderPolicies[TenantFeatureValueProvider.ProviderName] = "AbpTenantManagement.Tenants.ManageFeatures"; + }); + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs similarity index 94% rename from modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs rename to modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs index b03fc43d8a..e625e47880 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs +++ b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.FeatureManagement protected ICurrentTenant CurrentTenant { get; } public TenantFeatureManagementProvider( - IFeatureManagementStore store, + IFeatureManagementStore store, ICurrentTenant currentTenant) : base(store) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs index 822de19ad8..32aae64598 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs @@ -8,12 +8,13 @@ namespace Volo.Abp.TenantManagement { public override void Define(IPermissionDefinitionContext context) { - var identityGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement")); + var tenantManagementGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement")); - var rolesPermission = identityGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement")); - rolesPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create")); - rolesPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit")); - rolesPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete")); + var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures")); } private static LocalizableString L(string name) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json index 92a555e5a7..c153af5e10 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json @@ -4,6 +4,7 @@ "Permission:TenantManagement": "Tenant management", "Permission:Create": "Create", "Permission:Edit": "Edit", - "Permission:Delete": "Delete" + "Permission:Delete": "Delete", + "Permission:ManageFeatures": "Manage features" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json index a192048e78..8ff9d2c2d5 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json @@ -4,6 +4,7 @@ "Permission:TenantManagement": "Müşteri yönetimi", "Permission:Create": "Oluşturma", "Permission:Edit": "Düzenleme", - "Permission:Delete": "Silme" + "Permission:Delete": "Silme", + "Permission:ManageFeatures": "Özellikleri yönet" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs index bc30e65e1f..622c52d338 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs @@ -10,6 +10,7 @@ public const string Create = Default + ".Create"; public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; + public const string ManageFeatures = Default + ".ManageFeatures"; } } } \ No newline at end of file