代码之家  ›  专栏  ›  技术社区  ›  Charles de M.

ASP.NET核心使用来自当前用户的TenantId创建TenantProvider

  •  1
  • Charles de M.  · 技术社区  · 7 年前

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

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

    我想用当前用户的实际Tenantid替换这个假人,但是我不能让它工作。我尝试了以下操作,但无法检索用户的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 尽管用户已登录,但始终为空。有其他方法可以获得自定义属性吗 特南蒂 从ApplicationUser返回?

    看起来像是‘我很亲近,但还没有雪茄。’感谢您的指导。

    0 回复  |  直到 7 年前
    推荐文章