AbpSessionBase.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System;
  2. using Abp.Configuration.Startup;
  3. using Abp.MultiTenancy;
  4. namespace Abp.Runtime.Session
  5. {
  6. public abstract class AbpSessionBase : IAbpSession
  7. {
  8. public const string SessionOverrideContextKey = "Abp.Runtime.Session.Override";
  9. public IMultiTenancyConfig MultiTenancy { get; }
  10. public abstract long? UserId { get; }
  11. public abstract int? TenantId { get; }
  12. public abstract long? ImpersonatorUserId { get; }
  13. public abstract int? ImpersonatorTenantId { get; }
  14. public virtual MultiTenancySides MultiTenancySide
  15. {
  16. get
  17. {
  18. return MultiTenancy.IsEnabled && !TenantId.HasValue
  19. ? MultiTenancySides.Host
  20. : MultiTenancySides.Tenant;
  21. }
  22. }
  23. protected SessionOverride OverridedValue => SessionOverrideScopeProvider.GetValue(SessionOverrideContextKey);
  24. protected IAmbientScopeProvider<SessionOverride> SessionOverrideScopeProvider { get; }
  25. protected AbpSessionBase(IMultiTenancyConfig multiTenancy, IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider)
  26. {
  27. MultiTenancy = multiTenancy;
  28. SessionOverrideScopeProvider = sessionOverrideScopeProvider;
  29. }
  30. public IDisposable Use(int? tenantId, long? userId)
  31. {
  32. return SessionOverrideScopeProvider.BeginScope(SessionOverrideContextKey, new SessionOverride(tenantId, userId));
  33. }
  34. }
  35. }