| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using System;
- using System.Linq;
- using System.Security.Claims;
- using System.Threading;
- using Abp.Configuration.Startup;
- using Abp.Dependency;
- using Abp.MultiTenancy;
- using Abp.Runtime.Security;
- namespace Abp.Runtime.Session
- {
- /// <summary>
- /// Implements <see cref="IAbpSession"/> to get session properties from current claims.
- /// </summary>
- public class ClaimsAbpSession : AbpSessionBase, ISingletonDependency
- {
- public override long? UserId
- {
- get
- {
- if (OverridedValue != null)
- {
- return OverridedValue.UserId;
- }
- var userIdClaim = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.UserId);
- if (string.IsNullOrEmpty(userIdClaim?.Value))
- {
- return null;
- }
- long userId;
- if (!long.TryParse(userIdClaim.Value, out userId))
- {
- return null;
- }
- return userId;
- }
- }
- public override int? TenantId
- {
- get
- {
- if (!MultiTenancy.IsEnabled)
- {
- return MultiTenancyConsts.DefaultTenantId;
- }
- if (OverridedValue != null)
- {
- return OverridedValue.TenantId;
- }
- var tenantIdClaim = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.TenantId);
- if (!string.IsNullOrEmpty(tenantIdClaim?.Value))
- {
- return Convert.ToInt32(tenantIdClaim.Value);
- }
- if (UserId == null)
- {
- //Resolve tenant id from request only if user has not logged in!
- return TenantResolver.ResolveTenantId();
- }
-
- return null;
- }
- }
- public override long? ImpersonatorUserId
- {
- get
- {
- var impersonatorUserIdClaim = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId);
- if (string.IsNullOrEmpty(impersonatorUserIdClaim?.Value))
- {
- return null;
- }
- return Convert.ToInt64(impersonatorUserIdClaim.Value);
- }
- }
- public override int? ImpersonatorTenantId
- {
- get
- {
- if (!MultiTenancy.IsEnabled)
- {
- return MultiTenancyConsts.DefaultTenantId;
- }
- var impersonatorTenantIdClaim = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId);
- if (string.IsNullOrEmpty(impersonatorTenantIdClaim?.Value))
- {
- return null;
- }
- return Convert.ToInt32(impersonatorTenantIdClaim.Value);
- }
- }
- protected IPrincipalAccessor PrincipalAccessor { get; }
- protected ITenantResolver TenantResolver { get; }
- public ClaimsAbpSession(
- IPrincipalAccessor principalAccessor,
- IMultiTenancyConfig multiTenancy,
- ITenantResolver tenantResolver,
- IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider)
- : base(
- multiTenancy,
- sessionOverrideScopeProvider)
- {
- TenantResolver = tenantResolver;
- PrincipalAccessor = principalAccessor;
- }
- }
- }
|