/
ClaimsAbpSession.cs
121 lines (105 loc) · 3.68 KB
/
ClaimsAbpSession.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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;
}
}
}