diff --git a/Masa.Contrib.sln b/Masa.Contrib.sln index 847820f0a..2cbb866f5 100644 --- a/Masa.Contrib.sln +++ b/Masa.Contrib.sln @@ -302,14 +302,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BasicAbility", "BasicAbilit EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.BuildingBlocks.BasicAbility.Scheduler", "src\BuildingBlocks\MASA.BuildingBlocks\src\BasicAbility\Masa.BuildingBlocks.BasicAbility.Scheduler\Masa.BuildingBlocks.BasicAbility.Scheduler.csproj", "{0EB0CB69-4C44-4462-A92A-A9B9FDA171DE}" EndProject - Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.BasicAbility.Scheduler.Tests", "test\Masa.Contrib.BasicAbility.Scheduler.Tests\Masa.Contrib.BasicAbility.Scheduler.Tests.csproj", "{5980D054-E2F3-4143-93D1-01993A955AE7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.BasicAbility.Scheduler", "src\BasicAbility\Masa.Contrib.BasicAbility.Scheduler\Masa.Contrib.BasicAbility.Scheduler.csproj", "{8D84666E-C79E-4D49-B73D-360E62D312EF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Contrib.Dispatcher.IntegrationEvents", "src\Dispatcher\Masa.Contrib.Dispatcher.IntegrationEvents\Masa.Contrib.Dispatcher.IntegrationEvents.csproj", "{7C4B88FA-3681-4C29-BC3F-0FDB111C5681}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.Dispatcher.IntegrationEvents", "src\Dispatcher\Masa.Contrib.Dispatcher.IntegrationEvents\Masa.Contrib.Dispatcher.IntegrationEvents.csproj", "{7C4B88FA-3681-4C29-BC3F-0FDB111C5681}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Contrib.Dispatcher.IntegrationEvents.Dapr.Tests", "test\Masa.Contrib.Dispatcher.IntegrationEvents.Dapr.Tests\Masa.Contrib.Dispatcher.IntegrationEvents.Dapr.Tests.csproj", "{592297DE-DA72-452D-9D88-61EE882FE9A6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.Dispatcher.IntegrationEvents.Dapr.Tests", "test\Masa.Contrib.Dispatcher.IntegrationEvents.Dapr.Tests\Masa.Contrib.Dispatcher.IntegrationEvents.Dapr.Tests.csproj", "{592297DE-DA72-452D-9D88-61EE882FE9A6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.Identity.IdentityModel.Tests", "test\Masa.Contrib.Identity.IdentityModel.Tests\Masa.Contrib.Identity.IdentityModel.Tests.csproj", "{4E237346-F948-46AC-801B-492545978280}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1239,38 +1240,6 @@ Global {789ABED5-7C94-4F6F-ADCA-E97F3DFC9479}.Release|Any CPU.Build.0 = Release|Any CPU {789ABED5-7C94-4F6F-ADCA-E97F3DFC9479}.Release|x64.ActiveCfg = Release|Any CPU {789ABED5-7C94-4F6F-ADCA-E97F3DFC9479}.Release|x64.Build.0 = Release|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Debug|x64.Build.0 = Debug|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Release|Any CPU.Build.0 = Release|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Release|x64.ActiveCfg = Release|Any CPU - {D91C3145-C31C-4301-A493-96F94C903CF2}.Release|x64.Build.0 = Release|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Debug|x64.ActiveCfg = Debug|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Debug|x64.Build.0 = Debug|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|Any CPU.Build.0 = Release|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|x64.ActiveCfg = Release|Any CPU - {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|x64.Build.0 = Release|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.ActiveCfg = Debug|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.Build.0 = Debug|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|Any CPU.Build.0 = Release|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|x64.ActiveCfg = Release|Any CPU - {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|x64.Build.0 = Release|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|x64.ActiveCfg = Debug|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|x64.Build.0 = Debug|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|Any CPU.Build.0 = Release|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|x64.ActiveCfg = Release|Any CPU - {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|x64.Build.0 = Release|Any CPU {981E883E-CCDC-400B-8FB1-76E1E65C32AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {981E883E-CCDC-400B-8FB1-76E1E65C32AF}.Debug|Any CPU.Build.0 = Debug|Any CPU {981E883E-CCDC-400B-8FB1-76E1E65C32AF}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1287,6 +1256,22 @@ Global {0EB0CB69-4C44-4462-A92A-A9B9FDA171DE}.Release|Any CPU.Build.0 = Release|Any CPU {0EB0CB69-4C44-4462-A92A-A9B9FDA171DE}.Release|x64.ActiveCfg = Release|Any CPU {0EB0CB69-4C44-4462-A92A-A9B9FDA171DE}.Release|x64.Build.0 = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.ActiveCfg = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.Build.0 = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|Any CPU.Build.0 = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|x64.ActiveCfg = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|x64.Build.0 = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|x64.ActiveCfg = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|x64.Build.0 = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|Any CPU.Build.0 = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|x64.ActiveCfg = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|x64.Build.0 = Release|Any CPU {7C4B88FA-3681-4C29-BC3F-0FDB111C5681}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C4B88FA-3681-4C29-BC3F-0FDB111C5681}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C4B88FA-3681-4C29-BC3F-0FDB111C5681}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1303,6 +1288,14 @@ Global {592297DE-DA72-452D-9D88-61EE882FE9A6}.Release|Any CPU.Build.0 = Release|Any CPU {592297DE-DA72-452D-9D88-61EE882FE9A6}.Release|x64.ActiveCfg = Release|Any CPU {592297DE-DA72-452D-9D88-61EE882FE9A6}.Release|x64.Build.0 = Release|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Debug|x64.ActiveCfg = Debug|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Debug|x64.Build.0 = Debug|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Release|Any CPU.Build.0 = Release|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Release|x64.ActiveCfg = Release|Any CPU + {4E237346-F948-46AC-801B-492545978280}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1450,13 +1443,14 @@ Global {FF3FD53D-D23E-48AC-98B6-3B028B4DE8AF} = {0D34A7F0-DC77-4789-A136-93089CBD15C3} {83FA668F-C838-4883-996D-AF2ECF00FDF8} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} {789ABED5-7C94-4F6F-ADCA-E97F3DFC9479} = {38E6C400-90C0-493E-9266-C1602E229F1B} - {5980D054-E2F3-4143-93D1-01993A955AE7} = {38E6C400-90C0-493E-9266-C1602E229F1B} - {8D84666E-C79E-4D49-B73D-360E62D312EF} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} {981E883E-CCDC-400B-8FB1-76E1E65C32AF} = {0D34A7F0-DC77-4789-A136-93089CBD15C3} {0D34A7F0-DC77-4789-A136-93089CBD15C3} = {DC578D74-98F0-4F19-A230-CFA8DAEE0AF1} {0EB0CB69-4C44-4462-A92A-A9B9FDA171DE} = {0D34A7F0-DC77-4789-A136-93089CBD15C3} + {5980D054-E2F3-4143-93D1-01993A955AE7} = {38E6C400-90C0-493E-9266-C1602E229F1B} + {8D84666E-C79E-4D49-B73D-360E62D312EF} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} {7C4B88FA-3681-4C29-BC3F-0FDB111C5681} = {FBD326D3-E59C-433E-A88E-14E179E3093D} {592297DE-DA72-452D-9D88-61EE882FE9A6} = {38E6C400-90C0-493E-9266-C1602E229F1B} + {4E237346-F948-46AC-801B-492545978280} = {38E6C400-90C0-493E-9266-C1602E229F1B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {40383055-CC50-4600-AD9A-53C14F620D03} diff --git a/src/BuildingBlocks/MASA.BuildingBlocks b/src/BuildingBlocks/MASA.BuildingBlocks index a2a2adb63..a1c5e01a5 160000 --- a/src/BuildingBlocks/MASA.BuildingBlocks +++ b/src/BuildingBlocks/MASA.BuildingBlocks @@ -1 +1 @@ -Subproject commit a2a2adb635b81fc3f56b4717a81e8b23147e0421 +Subproject commit a1c5e01a585c22e0179012544017239c3459fbca diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/Const/ClaimType.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/Const/ClaimType.cs index 1db106656..45ec16a17 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/Const/ClaimType.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/Const/ClaimType.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Contrib.Identity.IdentityModel.Const; @@ -7,11 +7,13 @@ public class ClaimType { public const string DEFAULT_USER_ID = ClaimTypes.NameIdentifier; - public const string DEFAULT_USER_NAME = ClaimTypes.Name; + public const string DEFAULT_USER_NAME = ClaimTypes.Name; + + public const string DEFAULT_USER_ROLE = ClaimTypes.Role; public const string DEFAULT_TENANT_ID = $"{DEFAULT_PREFIX}/tenantid"; public const string DEFAULT_ENVIRONMENT = $"{DEFAULT_PREFIX}/environment"; - private const string DEFAULT_PREFIX= "https://masastack.com/security/identity/claims"; + private const string DEFAULT_PREFIX = "https://masastack.com/security/identity/claims"; } diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultIsolatedUserContext.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultIsolatedUserContext.cs index 093f2ffdd..23013421c 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultIsolatedUserContext.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultIsolatedUserContext.cs @@ -1,25 +1,23 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Contrib.Identity.IdentityModel; -public sealed class DefaultIsolatedUserContext : UserContext, IIsolatedUserContext +internal class DefaultIsolatedUserContext : DefaultUserContext, IIsolatedUserContext { public string? TenantId => GetUser()?.TenantId; public string? Environment => GetUser()?.Environment; - private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; - private readonly IOptionsMonitor _optionsMonitor; public DefaultIsolatedUserContext( ITypeConvertProvider typeConvertProvider, ICurrentPrincipalAccessor currentPrincipalAccessor, - IOptionsMonitor optionsMonitor) - : base(typeConvertProvider) + IOptionsMonitor optionsMonitor, + ILoggerFactory? loggerFactory = null) + : base(typeConvertProvider, currentPrincipalAccessor, optionsMonitor, loggerFactory) { - _currentPrincipalAccessor = currentPrincipalAccessor; _optionsMonitor = optionsMonitor; } @@ -34,20 +32,19 @@ public DefaultIsolatedUserContext( protected override IsolatedIdentityUser? GetUser() { - var claimsPrincipal = _currentPrincipalAccessor.GetCurrentPrincipal(); - if (claimsPrincipal == null) - return null; - - var userId = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserId); - if (userId == null) + var identityUser = GetUserBasicInfo(); + if (identityUser == null) + { return null; + } return new IsolatedIdentityUser { - Id = userId, - UserName = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserName), - TenantId = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.TenantId), - Environment = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.Environment), + Id = identityUser.Id, + UserName = identityUser.UserName, + Roles = identityUser.Roles, + TenantId = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.TenantId), + Environment = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.Environment), }; } } diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiEnvironmentUserContext.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiEnvironmentUserContext.cs index 5949c0c84..8fa1c10ca 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiEnvironmentUserContext.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiEnvironmentUserContext.cs @@ -1,41 +1,40 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Microsoft.Extensions.Logging; + namespace Masa.Contrib.Identity.IdentityModel; -public sealed class DefaultMultiEnvironmentUserContext: UserContext, IMultiEnvironmentUserContext +internal class DefaultMultiEnvironmentUserContext : DefaultUserContext, IMultiEnvironmentUserContext { public string? Environment => GetUser()?.Environment; - private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; - private readonly IOptionsMonitor _optionsMonitor; public DefaultMultiEnvironmentUserContext( ITypeConvertProvider typeConvertProvider, ICurrentPrincipalAccessor currentPrincipalAccessor, - IOptionsMonitor optionsMonitor) - : base(typeConvertProvider) + IOptionsMonitor optionsMonitor, + ILoggerFactory? loggerFactory = null) + : base(typeConvertProvider, currentPrincipalAccessor, optionsMonitor, loggerFactory) { - _currentPrincipalAccessor = currentPrincipalAccessor; _optionsMonitor = optionsMonitor; } protected override MultiEnvironmentIdentityUser? GetUser() { - var claimsPrincipal = _currentPrincipalAccessor.GetCurrentPrincipal(); - if (claimsPrincipal == null) - return null; - - var userId = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserId); - if (userId == null) + var identityUser = GetUserBasicInfo(); + if (identityUser == null) + { return null; + } return new MultiEnvironmentIdentityUser { - Id = userId, - UserName = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserName), - Environment = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.Environment), + Id = identityUser.Id, + UserName = identityUser.UserName, + Roles = identityUser.Roles, + Environment = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.Environment), }; } } diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiTenantUserContext.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiTenantUserContext.cs index a060f4f2a..1b2c6ed9e 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiTenantUserContext.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultMultiTenantUserContext.cs @@ -1,23 +1,23 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Microsoft.Extensions.Logging; + namespace Masa.Contrib.Identity.IdentityModel; -public class DefaultMultiTenantUserContext : UserContext, IMultiTenantUserContext +internal class DefaultMultiTenantUserContext : DefaultUserContext, IMultiTenantUserContext { public string? TenantId => GetUser()?.TenantId; - private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; - private readonly IOptionsMonitor _optionsMonitor; public DefaultMultiTenantUserContext( ITypeConvertProvider typeConvertProvider, ICurrentPrincipalAccessor currentPrincipalAccessor, - IOptionsMonitor optionsMonitor) - : base(typeConvertProvider) + IOptionsMonitor optionsMonitor, + ILoggerFactory? loggerFactory = null) + : base(typeConvertProvider, currentPrincipalAccessor, optionsMonitor, loggerFactory) { - _currentPrincipalAccessor = currentPrincipalAccessor; _optionsMonitor = optionsMonitor; } @@ -32,19 +32,18 @@ public DefaultMultiTenantUserContext( protected override MultiTenantIdentityUser? GetUser() { - var claimsPrincipal = _currentPrincipalAccessor.GetCurrentPrincipal(); - if (claimsPrincipal == null) - return null; - - var userId = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserId); - if (userId == null) + var identityUser = GetUserBasicInfo(); + if (identityUser == null) + { return null; + } return new MultiTenantIdentityUser { - Id = userId, - UserName = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserName), - TenantId = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.TenantId), + Id = identityUser.Id, + UserName = identityUser.UserName, + Roles = identityUser.Roles, + TenantId = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.TenantId), }; } } diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultUserContext.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultUserContext.cs index 6156577a9..64e0ad129 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultUserContext.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/DefaultUserContext.cs @@ -1,38 +1,56 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Contrib.Identity.IdentityModel; -public sealed class DefaultUserContext : UserContext +internal class DefaultUserContext : UserContext { - private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; - private readonly IOptionsMonitor _optionsMonitor; + private readonly ILogger? _logger; + + protected ClaimsPrincipal? ClaimsPrincipal { get; set; } public DefaultUserContext( ITypeConvertProvider typeConvertProvider, ICurrentPrincipalAccessor currentPrincipalAccessor, - IOptionsMonitor optionsMonitor) + IOptionsMonitor optionsMonitor, ILoggerFactory? loggerFactory = null) : base(typeConvertProvider) { - _currentPrincipalAccessor = currentPrincipalAccessor; _optionsMonitor = optionsMonitor; + ClaimsPrincipal = currentPrincipalAccessor.GetCurrentPrincipal(); + _logger = loggerFactory?.CreateLogger(); } - protected override IsolatedIdentityUser? GetUser() + protected override IdentityUser? GetUser() { - var claimsPrincipal = _currentPrincipalAccessor.GetCurrentPrincipal(); - if (claimsPrincipal == null) - return null; + return GetUserBasicInfo(); + } - var userId = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserId); + protected override IdentityUser? GetUserBasicInfo() + { + + var userId = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.UserId); if (userId == null) return null; - return new IsolatedIdentityUser + var roleStr = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.Role); + var roles = new List>(); + if (!string.IsNullOrWhiteSpace(roleStr)) + { + try + { + roles = JsonSerializer.Deserialize>>(roleStr) ?? roles; + } + catch (Exception e) + { + _logger?.LogError("role data deserialization failed", e); + } + } + return new IdentityUser { Id = userId, - UserName = claimsPrincipal.FindClaimValue(_optionsMonitor.CurrentValue.UserName) + UserName = ClaimsPrincipal?.FindClaimValue(_optionsMonitor.CurrentValue.UserName), + Roles = roles }; } } diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/IdentityClaimOptions.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/IdentityClaimOptions.cs index 1c2a04020..4f64d1aa5 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/IdentityClaimOptions.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/IdentityClaimOptions.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Contrib.Identity.IdentityModel; @@ -9,6 +9,8 @@ public class IdentityClaimOptions public string UserName { get; set; } + public string Role { get; set; } + public string TenantId { get; set; } public string Environment { get; set; } @@ -17,6 +19,7 @@ public IdentityClaimOptions() { UserId = ClaimType.DEFAULT_USER_ID; UserName = ClaimType.DEFAULT_USER_NAME; + Role = ClaimType.DEFAULT_USER_ROLE; TenantId = ClaimType.DEFAULT_TENANT_ID; Environment = ClaimType.DEFAULT_ENVIRONMENT; } diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/ServiceCollectionExtensions.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/ServiceCollectionExtensions.cs index 5e012d154..28e782e81 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/ServiceCollectionExtensions.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/ServiceCollectionExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Microsoft.Extensions.DependencyInjection; diff --git a/src/Identity/Masa.Contrib.Identity.IdentityModel/_Imports.cs b/src/Identity/Masa.Contrib.Identity.IdentityModel/_Imports.cs index b53c676fd..287fe982b 100644 --- a/src/Identity/Masa.Contrib.Identity.IdentityModel/_Imports.cs +++ b/src/Identity/Masa.Contrib.Identity.IdentityModel/_Imports.cs @@ -6,5 +6,7 @@ global using Masa.Contrib.Identity.IdentityModel.Const; global using Microsoft.AspNetCore.Http; global using Microsoft.Extensions.DependencyInjection.Extensions; +global using Microsoft.Extensions.Logging; global using Microsoft.Extensions.Options; global using System.Security.Claims; +global using System.Text.Json; diff --git a/test/Masa.Contrib.Identity.IdentityModel.Tests/TestIdentity.cs b/test/Masa.Contrib.Identity.IdentityModel.Tests/TestIdentity.cs index 7714d06bb..f9ce4fcc7 100644 --- a/test/Masa.Contrib.Identity.IdentityModel.Tests/TestIdentity.cs +++ b/test/Masa.Contrib.Identity.IdentityModel.Tests/TestIdentity.cs @@ -1,4 +1,4 @@ -// Copyright (c) MASA Stack All rights reserved. +// Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Contrib.Identity.IdentityModel.Tests; @@ -138,7 +138,8 @@ public void TestAddSimpleIdentityReturnUserIdEqual1() { new(ClaimType.DEFAULT_USER_ID, "1"), new(ClaimType.DEFAULT_USER_NAME, "Jim"), - new(ClaimType.DEFAULT_TENANT_ID, "1") + new(ClaimType.DEFAULT_TENANT_ID, "1"), + new(ClaimType.DEFAULT_USER_ROLE, "[{ \"Name\": \"admin\",\"Id\": \"1\" }]") }) }) }; @@ -147,6 +148,7 @@ public void TestAddSimpleIdentityReturnUserIdEqual1() Assert.IsTrue(userContext.IsAuthenticated); Assert.IsTrue(userContext.UserId == "1"); Assert.IsTrue(userContext.UserName == "Jim"); + Assert.IsTrue(userContext.GetUserRoles().Count() == 1); var multiTenantUserContext = serviceProvider.GetService(); Assert.IsNull(multiTenantUserContext);