Revise feature management providers.

pull/877/head
Halil ibrahim Kalkan 7 years ago
parent b630ddaf73
commit a1da9d8d44

@ -20,6 +20,7 @@ namespace Volo.Abp.FeatureManagement
Configure<FeatureManagementOptions>(options =>
{
options.Providers.Add<DefaultValueFeatureManagementProvider>();
options.Providers.Add<EditionFeatureManagementProvider>();
options.Providers.Add<TenantFeatureManagementProvider>();
});

@ -0,0 +1,32 @@
using System.Security.Principal;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.FeatureManagement
{
public class EditionFeatureManagementProvider : FeatureManagementProvider, ITransientDependency
{
public override string Name => EditionFeatureValueProvider.ProviderName;
protected ICurrentPrincipalAccessor PrincipalAccessor { get; }
public EditionFeatureManagementProvider(
IFeatureManagementStore store,
ICurrentPrincipalAccessor principalAccessor)
: base(store)
{
PrincipalAccessor = principalAccessor;
}
protected override string NormalizeProviderKey(string providerKey)
{
if (providerKey != null)
{
return providerKey;
}
return PrincipalAccessor.Principal?.FindEditionId()?.ToString("N");
}
}
}

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Features;
namespace Volo.Abp.FeatureManagement
{
public static class EditionFeatureManagerExtensions
{
public static Task<string> GetOrNullForEditionAsync(this IFeatureManager featureManager, [NotNull] string name, Guid editionId, bool fallback = true)
{
return featureManager.GetOrNullAsync(name, EditionFeatureValueProvider.ProviderName, editionId.ToString("N"), fallback);
}
public static Task<List<FeatureNameValue>> GetAllForEditionAsync(this IFeatureManager featureManager, Guid editionId, bool fallback = true)
{
return featureManager.GetAllAsync(EditionFeatureValueProvider.ProviderName, editionId.ToString("N"), fallback);
}
public static Task SetForEditionAsync(this IFeatureManager featureManager, Guid editionId, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false)
{
return featureManager.SetAsync(name, value, EditionFeatureValueProvider.ProviderName, editionId.ToString("N"), forceToSet);
}
}
}

@ -1,14 +1,31 @@
using Volo.Abp.Features;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.FeatureManagement
{
public class TenantFeatureManagementProvider : FeatureManagementProvider
public class TenantFeatureManagementProvider : FeatureManagementProvider, ITransientDependency
{
public override string Name => TenantFeatureValueProvider.ProviderName;
public TenantFeatureManagementProvider(IFeatureManagementStore store)
protected ICurrentTenant CurrentTenant { get; }
public TenantFeatureManagementProvider(
IFeatureManagementStore store,
ICurrentTenant currentTenant)
: base(store)
{
CurrentTenant = currentTenant;
}
protected override string NormalizeProviderKey(string providerKey)
{
if (providerKey != null)
{
return providerKey;
}
return CurrentTenant.Id?.ToString("N");
}
}
}

@ -13,29 +13,14 @@ namespace Volo.Abp.FeatureManagement
return featureManager.GetOrNullAsync(name, TenantFeatureValueProvider.ProviderName, tenantId.ToString(), fallback);
}
public static Task<string> GetOrNullForCurrentTenantAsync(this IFeatureManager featureManager, [NotNull] string name, bool fallback = true)
{
return featureManager.GetOrNullAsync(name, TenantFeatureValueProvider.ProviderName, null, fallback);
}
public static Task<List<FeatureNameValue>> GetAllForTenantAsync(this IFeatureManager featureManager, Guid tenantId, bool fallback = true)
{
return featureManager.GetAllAsync(TenantFeatureValueProvider.ProviderName, tenantId.ToString(), fallback);
}
public static Task<List<FeatureNameValue>> GetAllForCurrentTenantAsync(this IFeatureManager featureManager, bool fallback = true)
{
return featureManager.GetAllAsync(TenantFeatureValueProvider.ProviderName, null, fallback);
}
public static Task SetForTenantAsync(this IFeatureManager featureManager, Guid tenantId, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false)
{
return featureManager.SetAsync(name, value, TenantFeatureValueProvider.ProviderName, tenantId.ToString(), forceToSet);
}
public static Task SetForCurrentTenantAsync(this IFeatureManager featureManager, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false)
{
return featureManager.SetAsync(name, value, TenantFeatureValueProvider.ProviderName, null, forceToSet);
}
}
}

@ -0,0 +1,26 @@
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Features;
using Xunit;
namespace Volo.Abp.FeatureManagement
{
public class FeatureManager_Tests : FeatureManagementDomainTestBase
{
private readonly IFeatureManager _featureManager;
public FeatureManager_Tests()
{
_featureManager = GetRequiredService<IFeatureManager>();
}
[Fact]
public async Task Should_Get_A_FeatureValue_For_A_Provider()
{
(await _featureManager.GetOrNullForEditionAsync(
TestFeatureDefinitionProvider.BackupCount,
TestEditionIds.Enterprise
)).ShouldBe("5");
}
}
}

@ -1,5 +1,4 @@
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
@ -17,14 +16,6 @@ namespace Volo.Abp.FeatureManagement
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAlwaysAllowAuthorization();
Configure<FeatureManagementOptions>(options =>
{
options.Providers.InsertBefore(
typeof(TenantFeatureManagementProvider),
typeof(EditionFeatureManagementProvider)
);
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)

@ -1,14 +0,0 @@
using Volo.Abp.Features;
namespace Volo.Abp.FeatureManagement
{
public class EditionFeatureManagementProvider : FeatureManagementProvider
{
public override string Name => EditionFeatureValueProvider.ProviderName;
public EditionFeatureManagementProvider(IFeatureManagementStore store)
: base(store)
{
}
}
}

@ -31,7 +31,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.SocialLogins,
true.ToString().ToLowerInvariant(),
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Regular
TestEditionIds.Regular.ToString("N")
)
);
@ -42,7 +42,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.UserCount,
"10",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Regular
TestEditionIds.Regular.ToString("N")
)
);
@ -53,7 +53,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.ProjectCount,
"1",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Regular
TestEditionIds.Regular.ToString("N")
)
);
@ -68,7 +68,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.SocialLogins,
true.ToString().ToLowerInvariant(),
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
)
);
@ -79,7 +79,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.EmailSupport,
true.ToString().ToLowerInvariant(),
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
)
);
@ -90,7 +90,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.UserCount,
"20",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
)
);
@ -101,7 +101,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.ProjectCount,
"3",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
)
);
@ -112,7 +112,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.BackupCount,
"5",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
)
);
@ -127,7 +127,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.SocialLogins,
true.ToString().ToLowerInvariant(),
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Ultimate.ToString("N")
)
);
@ -138,7 +138,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.EmailSupport,
true.ToString().ToLowerInvariant(),
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Ultimate.ToString("N")
)
);
@ -149,7 +149,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.DailyAnalysis,
true.ToString().ToLowerInvariant(),
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Ultimate.ToString("N")
)
);
@ -160,7 +160,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.UserCount,
"100",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Ultimate.ToString("N")
)
);
@ -171,7 +171,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.ProjectCount,
"10",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Ultimate.ToString("N")
)
);
@ -182,7 +182,7 @@ namespace Volo.Abp.FeatureManagement
TestFeatureDefinitionProvider.BackupCount,
"10",
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Ultimate.ToString("N")
)
);

@ -24,7 +24,7 @@ namespace Volo.Abp.FeatureManagement
var featureValue = await Repository.FindAsync(
TestFeatureDefinitionProvider.ProjectCount,
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
);
featureValue.ShouldNotBeNull();
@ -34,7 +34,7 @@ namespace Volo.Abp.FeatureManagement
featureValue = await Repository.FindAsync(
TestFeatureDefinitionProvider.ProjectCount,
EditionFeatureValueProvider.ProviderName,
"undefined-edition-name"
"undefined-edition-id"
);
featureValue.ShouldBeNull();
@ -45,7 +45,7 @@ namespace Volo.Abp.FeatureManagement
{
var featureValues = await Repository.GetListAsync(
EditionFeatureValueProvider.ProviderName,
TestEditionNames.Enterprise
TestEditionIds.Enterprise.ToString("N")
);
featureValues.Count.ShouldBeGreaterThan(0);

@ -0,0 +1,18 @@
using System;
namespace Volo.Abp.FeatureManagement
{
public static class TestEditionIds
{
public static Guid Regular { get; }
public static Guid Enterprise { get; }
public static Guid Ultimate { get; }
static TestEditionIds()
{
Regular = Guid.Parse("532599ab-c0c0-4345-a04a-e322867b6e15");
Enterprise = Guid.Parse("27e50758-1feb-436a-be4f-cae8519e0cb2");
Ultimate = Guid.Parse("6ea78c22-be32-497e-aaba-a2332c564c5e");
}
}
}

@ -1,9 +0,0 @@
namespace Volo.Abp.FeatureManagement
{
public static class TestEditionNames
{
public const string Regular = "Regular";
public const string Enterprise = "Enterprise";
public const string Ultimate = "Ultimate";
}
}
Loading…
Cancel
Save