Browse Source

Try to get tenant's `EditionId` in `EditionFeatureManagementProvider`.

pull/22632/head
maliming 1 year ago
parent
commit
5003614b0c
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 4
      framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs
  2. 50
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/EditionFeatureManagementProvider.cs

4
framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs

@ -32,7 +32,7 @@ public class EditionFeatureValueProvider : FeatureValueProvider
public async override Task<string?> GetOrNullAsync(FeatureDefinition feature)
{
var editionId = await GetEditionIdAsync();
var editionId = await FindEditionIdAsync();
if (editionId == null)
{
return null;
@ -41,7 +41,7 @@ public class EditionFeatureValueProvider : FeatureValueProvider
return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString());
}
protected virtual async Task<Guid?> GetEditionIdAsync()
protected virtual async Task<Guid?> FindEditionIdAsync()
{
var editionId = PrincipalAccessor.Principal?.FindEditionId();
if (editionId != null)

50
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/EditionFeatureManagementProvider.cs

@ -1,7 +1,9 @@
using System.Security.Principal;
using System;
using System.Security.Principal;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.FeatureManagement;
@ -11,22 +13,58 @@ public class EditionFeatureManagementProvider : FeatureManagementProvider, ITran
public override string Name => EditionFeatureValueProvider.ProviderName;
protected ICurrentPrincipalAccessor PrincipalAccessor { get; }
protected ITenantStore TenantStore { get; }
protected ICurrentTenant CurrentTenant { get; }
protected string CurrentCompatibleProviderName { get; set; }
public EditionFeatureManagementProvider(
IFeatureManagementStore store,
ICurrentPrincipalAccessor principalAccessor)
ICurrentPrincipalAccessor principalAccessor,
ITenantStore tenantStore,
ICurrentTenant currentTenant)
: base(store)
{
PrincipalAccessor = principalAccessor;
TenantStore = tenantStore;
CurrentTenant = currentTenant;
}
protected override Task<string> NormalizeProviderKeyAsync(string providerKey)
public override bool Compatible(string providerName)
{
if (providerKey != null)
CurrentCompatibleProviderName = providerName;
return providerName == TenantFeatureValueProvider.ProviderName || base.Compatible(providerName);
}
protected async override Task<string> NormalizeProviderKeyAsync(string providerKey)
{
return (await FindEditionIdAsync(providerKey))?.ToString();
}
protected virtual async Task<Guid?> FindEditionIdAsync(string providerKey)
{
if (Guid.TryParse(providerKey, out var parsedEditionOrTenantId))
{
if (CurrentCompatibleProviderName == TenantFeatureValueProvider.ProviderName)
{
var tenant = await TenantStore.FindAsync(parsedEditionOrTenantId);
if (tenant != null)
{
return tenant?.EditionId;
}
}
return parsedEditionOrTenantId;
}
if (CurrentTenant.Id.HasValue)
{
return Task.FromResult(providerKey);
var tenant = await TenantStore.FindAsync(CurrentTenant.GetId());
if (tenant != null)
{
return tenant?.EditionId;
}
}
return Task.FromResult(PrincipalAccessor.Principal?.FindEditionId()?.ToString("N"));
return PrincipalAccessor.Principal?.FindEditionId();
}
}

Loading…
Cancel
Save