using System; using Abp.Configuration.Startup; using Abp.MultiTenancy; namespace Abp.Runtime.Session { public abstract class AbpSessionBase : IAbpSession { public const string SessionOverrideContextKey = "Abp.Runtime.Session.Override"; public IMultiTenancyConfig MultiTenancy { get; } public abstract long? UserId { get; } public abstract int? TenantId { get; } public abstract long? ImpersonatorUserId { get; } public abstract int? ImpersonatorTenantId { get; } public virtual MultiTenancySides MultiTenancySide { get { return MultiTenancy.IsEnabled && !TenantId.HasValue ? MultiTenancySides.Host : MultiTenancySides.Tenant; } } protected SessionOverride OverridedValue => SessionOverrideScopeProvider.GetValue(SessionOverrideContextKey); protected IAmbientScopeProvider SessionOverrideScopeProvider { get; } protected AbpSessionBase(IMultiTenancyConfig multiTenancy, IAmbientScopeProvider sessionOverrideScopeProvider) { MultiTenancy = multiTenancy; SessionOverrideScopeProvider = sessionOverrideScopeProvider; } public IDisposable Use(int? tenantId, long? userId) { return SessionOverrideScopeProvider.BeginScope(SessionOverrideContextKey, new SessionOverride(tenantId, userId)); } } }