asp.net core使用当前用户的TenantId创建TenantProvider

时间:2018-06-07 09:47:46

标签: entity-framework asp.net-core asp.net-identity claims-based-identity

我的组织需要在共享数据库上使用多租户解决方案。基于[Gunnar Peipman] [1]创建的示例,我创建了一个带有属性Guid TenantId {get; set;}的BaseEntity类。实际的Tenantprovider已经实现为一个调用临时虚拟TenantId的服务。

public interface ITenantProvider
    {
    Guid GetTenantId();
    }

public class DummyTenantProvider : ITenantProvider
{
    public Guid GetTenantId()
    {
         return Guid.Parse("069b57ab-6ec7-479c-b6d4-a61ba3001c86");
    }
}

我想用当前用户的实际TenantId替换Dummy,但我无法让它工作。我尝试了以下操作,但我无法检索用户的TenantId(在ApplicationUser中创建为属性)。

public class RealTenantProvider : ITenantProvider
{
    private readonly IHttpContextAccessor _contextAccessor;
    public RealTenantProvider(IHttpContextAccessor contextAccessor)
    {
        _contextAccessor = contextAccessor;            
    }

    public Guid GetTenantId()
    {           
        var curUsr = _contextAccessor.HttpContext.User;
        if (curUsr.Identity.Name != null)
        {
            return Guid.Parse(curUsr.FindFirst("TenantId").Value); 
        }           
        return Guid.Parse("00000000-0000-0000-000-000000000000");
    }        
}

但是,curUsr.Identity.Name始终为null,尽管用户已登录。是否有其他方法可以从applicationUser返回自定义属性TenantId

看起来'我很亲密,但还没有雪茄:)。任何指导都表示赞赏。

0 个答案:

没有答案