Browse Source

Add `EditionId` to `TenantConfiguration` and use it in `EditionFeatureValueProvider`.

pull/22632/head
maliming 1 year ago
parent
commit
d2eef4f1f6
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 37
      framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs
  2. 5
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs

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

@ -1,5 +1,7 @@
using System.Security.Principal;
using System;
using System.Security.Principal;
using System.Threading.Tasks;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.Features;
@ -12,15 +14,25 @@ public class EditionFeatureValueProvider : FeatureValueProvider
protected ICurrentPrincipalAccessor PrincipalAccessor;
public EditionFeatureValueProvider(IFeatureStore featureStore, ICurrentPrincipalAccessor principalAccessor)
protected ITenantStore TenantStore { get; }
protected ICurrentTenant CurrentTenant { get; }
public EditionFeatureValueProvider(
IFeatureStore featureStore,
ICurrentPrincipalAccessor principalAccessor,
ITenantStore tenantStore,
ICurrentTenant currentTenant)
: base(featureStore)
{
PrincipalAccessor = principalAccessor;
TenantStore = tenantStore;
CurrentTenant = currentTenant;
}
public override async Task<string?> GetOrNullAsync(FeatureDefinition feature)
public async override Task<string?> GetOrNullAsync(FeatureDefinition feature)
{
var editionId = PrincipalAccessor.Principal?.FindEditionId();
var editionId = await GetEditionIdAsync();
if (editionId == null)
{
return null;
@ -28,4 +40,21 @@ public class EditionFeatureValueProvider : FeatureValueProvider
return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString());
}
protected virtual async Task<Guid?> GetEditionIdAsync()
{
var editionId = PrincipalAccessor.Principal?.FindEditionId();
if (editionId != null)
{
return editionId;
}
if (CurrentTenant.Id == null)
{
return null;
}
var tenant = await TenantStore.FindAsync(CurrentTenant.Id.Value);
return tenant?.EditionId;
}
}

5
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs

@ -17,6 +17,8 @@ public class TenantConfiguration
public bool IsActive { get; set; }
public Guid? EditionId { get; set; }
public TenantConfiguration()
{
IsActive = true;
@ -33,11 +35,12 @@ public class TenantConfiguration
ConnectionStrings = new ConnectionStrings();
}
public TenantConfiguration(Guid id, [NotNull] string name, [NotNull] string normalizedName)
public TenantConfiguration(Guid id, [NotNull] string name, [NotNull] string normalizedName, Guid? editionId = null)
: this(id, name)
{
Check.NotNull(normalizedName, nameof(normalizedName));
NormalizedName = normalizedName;
EditionId = editionId;
}
}

Loading…
Cancel
Save