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