Ядро asp.net Создание TenantProvider с TenantId от текущего пользователя - PullRequest
0 голосов
/ 07 июня 2018

Моя организация нуждается в мультитенантном решении для общей базы данных.Основываясь на примере, созданном [Гуннаром Пейпманом] [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");
    }
}

Я хотел бы заменить Dummy фактическим 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 всегда равно нулю, хотя пользователь вошел в систему. Есть лидругой способ получить пользовательское свойство TenantId из applicationUser вернулось?

Похоже, «я близко, но сигары еще нет :).Любое руководство приветствуется.

...