From 3b09f26e68174a8c197dee2990d519a3a87ee535 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 12 Nov 2023 11:35:58 +0800 Subject: [PATCH] Update `AbpClaimsPrincipalFactory` system. --- .../Volo/Abp/Security/AbpSecurityModule.cs | 9 ++----- .../Claims/AbpClaimsPrincipalFactory.cs | 24 +++++++++++++------ .../AbpClaimsPrincipalFactoryOptions.cs | 4 ++-- .../IAbpDynamicClaimsPrincipalContributor.cs | 6 +++-- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs index 9705c1e2e6..5abddbd7a0 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs @@ -63,20 +63,15 @@ public class AbpSecurityModule : AbpModule private static void AutoAddClaimsPrincipalContributors(IServiceCollection services) { var contributorTypes = new List(); + var dynamicContributorTypes = new List(); services.OnRegistered(context => { - if (typeof(IAbpClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType) && - !typeof(IAbpDynamicClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType)) + if (typeof(IAbpClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType)) { contributorTypes.Add(context.ImplementationType); } - }); - - var dynamicContributorTypes = new List(); - services.OnRegistered(context => - { if (typeof(IAbpDynamicClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType)) { dynamicContributorTypes.Add(context.ImplementationType); diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs index 77635d72f4..b0e9fea653 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs @@ -2,7 +2,6 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Volo.Abp.Collections; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Security.Claims; @@ -24,15 +23,15 @@ public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientD public virtual async Task CreateAsync(ClaimsPrincipal? existsClaimsPrincipal = null) { - return await InternalCreateAsync(Options.Contributors, existsClaimsPrincipal); + return await InternalCreateAsync(Options, existsClaimsPrincipal, false); } public virtual async Task CreateDynamicAsync(ClaimsPrincipal? existsClaimsPrincipal = null) { - return await InternalCreateAsync(Options.DynamicContributors, existsClaimsPrincipal); + return await InternalCreateAsync(Options, existsClaimsPrincipal, true); } - public virtual async Task InternalCreateAsync(ITypeList contributorTypes, ClaimsPrincipal? existsClaimsPrincipal = null) + public virtual async Task InternalCreateAsync(AbpClaimsPrincipalFactoryOptions options, ClaimsPrincipal? existsClaimsPrincipal = null, bool isDynamic = false) { using (var scope = ServiceScopeFactory.CreateScope()) { @@ -43,10 +42,21 @@ public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientD var context = new AbpClaimsPrincipalContributorContext(claimsPrincipal, scope.ServiceProvider); - foreach (var contributorType in contributorTypes) + if (!isDynamic) { - var contributor = (IAbpClaimsPrincipalContributor)scope.ServiceProvider.GetRequiredService(contributorType); - await contributor.ContributeAsync(context); + foreach (var contributorType in options.Contributors) + { + var contributor = (IAbpClaimsPrincipalContributor)scope.ServiceProvider.GetRequiredService(contributorType); + await contributor.ContributeAsync(context); + } + } + else + { + foreach (var contributorType in options.DynamicContributors) + { + var contributor = (IAbpDynamicClaimsPrincipalContributor)scope.ServiceProvider.GetRequiredService(contributorType); + await contributor.ContributeAsync(context); + } } return context.ClaimsPrincipal; diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs index f2f422b2a3..0f5b5cdbd6 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs @@ -8,7 +8,7 @@ public class AbpClaimsPrincipalFactoryOptions { public ITypeList Contributors { get; } - public ITypeList DynamicContributors { get; } + public ITypeList DynamicContributors { get; } public List DynamicClaims { get; } @@ -19,7 +19,7 @@ public class AbpClaimsPrincipalFactoryOptions public AbpClaimsPrincipalFactoryOptions() { Contributors = new TypeList(); - DynamicContributors = new TypeList(); + DynamicContributors = new TypeList(); DynamicClaims = new List { diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpDynamicClaimsPrincipalContributor.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpDynamicClaimsPrincipalContributor.cs index dde236c363..43f73374d7 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpDynamicClaimsPrincipalContributor.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpDynamicClaimsPrincipalContributor.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; + namespace Volo.Abp.Security.Claims; -public interface IAbpDynamicClaimsPrincipalContributor : IAbpClaimsPrincipalContributor +public interface IAbpDynamicClaimsPrincipalContributor { - + Task ContributeAsync(AbpClaimsPrincipalContributorContext context); }