From 540dedb35e344b36b9352b7e5acb09992e4e0c38 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 25 Sep 2020 16:37:20 +0800 Subject: [PATCH 1/3] Introduce ITenantConfigurationProvider. --- .../MultiTenancy/MultiTenancyMiddleware.cs | 48 ++------------- .../ITenantConfigurationProvider.cs | 9 +++ .../TenantConfigurationProvider.cs | 58 +++++++++++++++++++ 3 files changed, 73 insertions(+), 42 deletions(-) create mode 100644 framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs create mode 100644 framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs index 2c82095dac..e0a5cfb498 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Volo.Abp.DependencyInjection; using Volo.Abp.MultiTenancy; @@ -8,59 +7,24 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { public class MultiTenancyMiddleware : IMiddleware, ITransientDependency { - private readonly ITenantResolver _tenantResolver; - private readonly ITenantStore _tenantStore; + private readonly ITenantConfigurationProvider _tenantConfigurationProvider; private readonly ICurrentTenant _currentTenant; - private readonly ITenantResolveResultAccessor _tenantResolveResultAccessor; public MultiTenancyMiddleware( - ITenantResolver tenantResolver, - ITenantStore tenantStore, - ICurrentTenant currentTenant, - ITenantResolveResultAccessor tenantResolveResultAccessor) + ITenantConfigurationProvider tenantConfigurationProvider, + ICurrentTenant currentTenant) { - _tenantResolver = tenantResolver; - _tenantStore = tenantStore; + _tenantConfigurationProvider = tenantConfigurationProvider; _currentTenant = currentTenant; - _tenantResolveResultAccessor = tenantResolveResultAccessor; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - var resolveResult = _tenantResolver.ResolveTenantIdOrName(); - _tenantResolveResultAccessor.Result = resolveResult; - - TenantConfiguration tenant = null; - if (resolveResult.TenantIdOrName != null) - { - tenant = await FindTenantAsync(resolveResult.TenantIdOrName); - - if (tenant == null) - { - throw new BusinessException( - code: "Volo.AbpIo.MultiTenancy:010001", - message: "Tenant not found!", - details: "There is no tenant with the tenant id or name: " + resolveResult.TenantIdOrName - ); - } - } - + var tenant = await _tenantConfigurationProvider.ResolverAndGet(); using (_currentTenant.Change(tenant?.Id, tenant?.Name)) { await next(context); } } - - private async Task FindTenantAsync(string tenantIdOrName) - { - if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) - { - return await _tenantStore.FindAsync(parsedTenantId); - } - else - { - return await _tenantStore.FindAsync(tenantIdOrName); - } - } } } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs new file mode 100644 index 0000000000..6d573bac36 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.MultiTenancy +{ + public interface ITenantConfigurationProvider + { + Task ResolverAndGet(); + } +} diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs new file mode 100644 index 0000000000..c07ec3931d --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs @@ -0,0 +1,58 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.MultiTenancy +{ + public class TenantConfigurationProvider : ITenantConfigurationProvider, ITransientDependency + { + protected virtual ITenantResolver TenantResolver { get; } + protected virtual ITenantStore TenantStore { get; } + protected virtual ITenantResolveResultAccessor TenantResolveResultAccessor { get; } + + public TenantConfigurationProvider( + ITenantResolver tenantResolver, + ITenantStore tenantStore, + ITenantResolveResultAccessor tenantResolveResultAccessor) + { + TenantResolver = tenantResolver; + TenantStore = tenantStore; + TenantResolveResultAccessor = tenantResolveResultAccessor; + } + + public virtual async Task ResolverAndGet() + { + var resolveResult = TenantResolver.ResolveTenantIdOrName(); + TenantResolveResultAccessor.Result = resolveResult; + + TenantConfiguration tenant = null; + if (resolveResult.TenantIdOrName != null) + { + tenant = await FindTenantAsync(resolveResult.TenantIdOrName); + + if (tenant == null) + { + throw new BusinessException( + code: "Volo.AbpIo.MultiTenancy:010001", + message: "Tenant not found!", + details: "There is no tenant with the tenant id or name: " + resolveResult.TenantIdOrName + ); + } + } + + return tenant; + } + + protected virtual async Task FindTenantAsync(string tenantIdOrName) + { + if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) + { + return await TenantStore.FindAsync(parsedTenantId); + } + else + { + return await TenantStore.FindAsync(tenantIdOrName); + } + } + } +} From fbe4975543b7820942da1fc5d73c875bbba6b288 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Mon, 5 Oct 2020 09:32:34 +0800 Subject: [PATCH 2/3] Rename ResolverAndGet to GetAsync. --- .../Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs | 2 +- .../Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs | 2 +- .../Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs index e0a5cfb498..24e2b40067 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - var tenant = await _tenantConfigurationProvider.ResolverAndGet(); + var tenant = await _tenantConfigurationProvider.GetAsync(); using (_currentTenant.Change(tenant?.Id, tenant?.Name)) { await next(context); diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs index 6d573bac36..d46b6b2497 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs @@ -4,6 +4,6 @@ namespace Volo.Abp.MultiTenancy { public interface ITenantConfigurationProvider { - Task ResolverAndGet(); + Task GetAsync(); } } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs index c07ec3931d..7e32611dfb 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.MultiTenancy TenantResolveResultAccessor = tenantResolveResultAccessor; } - public virtual async Task ResolverAndGet() + public virtual async Task GetAsync() { var resolveResult = TenantResolver.ResolveTenantIdOrName(); TenantResolveResultAccessor.Result = resolveResult; From dbd3d2dd86dbcdfb6f7e4d4ad33209a7556cc022 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Tue, 6 Oct 2020 21:42:45 +0800 Subject: [PATCH 3/3] Add Add saveResolveResult parameter to ITenantConfigurationProvider. --- .../Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs | 2 +- .../Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs | 2 +- .../Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs index 24e2b40067..0aeb97e89d 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - var tenant = await _tenantConfigurationProvider.GetAsync(); + var tenant = await _tenantConfigurationProvider.GetAsync(saveResolveResult: true); using (_currentTenant.Change(tenant?.Id, tenant?.Name)) { await next(context); diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs index d46b6b2497..010a10791a 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs @@ -4,6 +4,6 @@ namespace Volo.Abp.MultiTenancy { public interface ITenantConfigurationProvider { - Task GetAsync(); + Task GetAsync(bool saveResolveResult = false); } } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs index 7e32611dfb..a89c44b465 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs @@ -20,10 +20,14 @@ namespace Volo.Abp.MultiTenancy TenantResolveResultAccessor = tenantResolveResultAccessor; } - public virtual async Task GetAsync() + public virtual async Task GetAsync(bool saveResolveResult = false) { var resolveResult = TenantResolver.ResolveTenantIdOrName(); - TenantResolveResultAccessor.Result = resolveResult; + + if (saveResolveResult) + { + TenantResolveResultAccessor.Result = resolveResult; + } TenantConfiguration tenant = null; if (resolveResult.TenantIdOrName != null)