mirror of https://github.com/abpframework/abp.git
5 changed files with 111 additions and 12 deletions
@ -0,0 +1,30 @@ |
|||||
|
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<string> GetOrNullAsync(FeatureDefinition feature) |
||||
|
{ |
||||
|
if (CurrentTenant.Id.HasValue || !feature.IsAvailableToHost) |
||||
|
{ |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
return await FeatureStore.GetOrNullAsync(feature.Name, Name, null); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
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<string> 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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue