Browse Source

Created ClaimsHttpTenantResolveContributer.

pull/221/head
Halil İbrahim Kalkan 8 years ago
parent
commit
fd0f010f5c
  1. 4
      src/MicroserviceDemo/MicroserviceDemo.Web/MicroservicesDemoWebModule.cs
  2. 9
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyModule.cs
  3. 24
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/ClaimsHttpTenantResolveContributer.cs
  4. 2
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributerBase.cs
  5. 19
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs

4
src/MicroserviceDemo/MicroserviceDemo.Web/MicroservicesDemoWebModule.cs

@ -127,8 +127,6 @@ namespace MicroserviceDemo.Web
app.UseDeveloperExceptionPage();
}
app.UseMultiTenancy();
app.UseStaticFiles();
app.UseVirtualFiles();
@ -140,6 +138,8 @@ namespace MicroserviceDemo.Web
app.UseAuthentication();
app.UseMultiTenancy();
app.UseMvc(routes =>
{
routes.MapRoute(

9
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyModule.cs

@ -14,10 +14,11 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
services.Configure<TenantResolveOptions>(options =>
{
options.TenantResolvers.Insert(0, new QueryStringTenantResolveContributer());
options.TenantResolvers.Insert(1, new RouteTenantResolveContributer());
options.TenantResolvers.Insert(2, new HeaderTenantResolveContributer());
options.TenantResolvers.Insert(3, new CookieTenantResolveContributer());
options.TenantResolvers.Insert(0, new ClaimsHttpTenantResolveContributer());
options.TenantResolvers.Insert(1, new QueryStringTenantResolveContributer());
options.TenantResolvers.Insert(2, new RouteTenantResolveContributer());
options.TenantResolvers.Insert(3, new HeaderTenantResolveContributer());
options.TenantResolvers.Insert(4, new CookieTenantResolveContributer());
});
services.AddAssemblyOf<AbpAspNetCoreMultiTenancyModule>();

24
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/ClaimsHttpTenantResolveContributer.cs

@ -0,0 +1,24 @@
using System.Linq;
using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.AspNetCore.MultiTenancy
{
public class ClaimsHttpTenantResolveContributer : HttpTenantResolveContributerBase
{
protected override void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext)
{
if (httpContext.User?.Identity?.IsAuthenticated == true)
{
base.ResolveFromHttpContext(context, httpContext);
context.Handled = true;
}
}
protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext)
{
var tenantKey = context.GetAspNetCoreMultiTenancyOptions().TenantKey;
return httpContext.User.Claims.FirstOrDefault(c => c.Type == tenantKey)?.Value;
}
}
}

2
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributerBase.cs

@ -29,7 +29,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
}
}
private void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext)
protected virtual void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext)
{
var tenantIdOrName = GetTenantIdOrNameFromHttpContextOrNull(context, httpContext);
if (!tenantIdOrName.IsNullOrEmpty())

19
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs

@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy;
@ -27,13 +28,18 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
public async Task Invoke(HttpContext httpContext)
{
//TODO: Try-catch and return "unknown tenant" if found tenant is not in the store..?
using (SetCurrentTenant(await ResolveCurrentTenantAsync()))
{
await _next(httpContext);
}
}
private async Task<TenantInfo> ResolveCurrentTenantAsync()
{
var tenantIdOrName = _tenantResolver.ResolveTenantIdOrName();
if (tenantIdOrName == null)
{
await _next(httpContext);
return;
return null;
}
var tenant = await FindTenantAsync(tenantIdOrName);
@ -42,10 +48,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
throw new AbpException("There is no tenant with given tenant id or name: " + tenantIdOrName);
}
using (SetCurrent(tenant))
{
await _next(httpContext);
}
return tenant;
}
private async Task<TenantInfo> FindTenantAsync(string tenantIdOrName)
@ -60,7 +63,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
}
}
private IDisposable SetCurrent(TenantInfo tenant)
private IDisposable SetCurrentTenant([CanBeNull] TenantInfo tenant)
{
var parentScope = _currentTenantIdAccessor.Current;
_currentTenantIdAccessor.Current = new TenantIdWrapper(tenant?.Id);

Loading…
Cancel
Save