Skip to content

Commit fa4e48b

Browse files
authored
VCST-2048: Extend ClaimsPrincipalExtensions with GetUserId and GetUserName (#2855)
feat: Extend ClaimsPrincipalExtensions with GetCurrentUserId and resolving of UserIdClaimTypes based on IdentityOptions settings.
1 parent d917abf commit fa4e48b

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/VirtoCommerce.Platform.Core/Security/ClaimsPrincipalExtensions.cs

+31-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,37 @@ namespace VirtoCommerce.Platform.Core.Security
88
{
99
public static class ClaimsPrincipalExtensions
1010
{
11+
public static string[] UserIdClaimTypes { get; set; } = [];
12+
13+
public static string[] UserNameClaimTypes { get; set; } = [];
14+
15+
public static string GetUserId(this ClaimsPrincipal claimsPrincipal)
16+
{
17+
return GetClaimValue(claimsPrincipal, UserIdClaimTypes);
18+
}
19+
20+
public static string GetUserName(this ClaimsPrincipal claimsPrincipal)
21+
{
22+
return GetClaimValue(claimsPrincipal, UserNameClaimTypes);
23+
}
24+
25+
private static string GetClaimValue(ClaimsPrincipal claimsPrincipal, string[] claimTypes)
26+
{
27+
if (claimsPrincipal != null)
28+
{
29+
foreach (var claimType in claimTypes)
30+
{
31+
var value = claimsPrincipal.FindFirstValue(claimType);
32+
if (!string.IsNullOrEmpty(value))
33+
{
34+
return value;
35+
}
36+
}
37+
}
38+
39+
return null;
40+
}
41+
1142
public static Permission FindPermission(this ClaimsPrincipal principal, string permissionName, JsonSerializerSettings jsonSettings)
1243
{
1344
return FindPermissions(principal, permissionName, jsonSettings).FirstOrDefault();
@@ -27,7 +58,6 @@ public static IList<Permission> FindPermissions(this ClaimsPrincipal principal,
2758
return result;
2859
}
2960

30-
3161
public static bool HasGlobalPermission(this ClaimsPrincipal principal, string permissionName)
3262
{
3363
// TODO: Check cases with locked user

src/VirtoCommerce.Platform.Web/Startup.cs

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Net;
77
using System.Reflection;
88
using System.Runtime.InteropServices;
9+
using System.Security.Claims;
910
using System.Security.Cryptography.X509Certificates;
1011
using System.Text;
1112
using System.Threading.Tasks;
@@ -274,6 +275,9 @@ public void ConfigureServices(IServiceCollection services)
274275
options.ClaimsIdentity.UserNameClaimType = OpenIddictConstants.Claims.Subject;
275276
options.ClaimsIdentity.UserIdClaimType = OpenIddictConstants.Claims.Name;
276277
options.ClaimsIdentity.RoleClaimType = OpenIddictConstants.Claims.Role;
278+
279+
ClaimsPrincipalExtensions.UserIdClaimTypes = [options.ClaimsIdentity.UserIdClaimType, ClaimTypes.NameIdentifier];
280+
ClaimsPrincipalExtensions.UserNameClaimTypes = [options.ClaimsIdentity.UserNameClaimType];
277281
});
278282

279283
services.ConfigureOptions<ConfigureSecurityStampValidatorOptions>();

0 commit comments

Comments
 (0)