Browse Source

Update `AbpClaimsPrincipalFactory` system.

pull/18064/head
maliming 3 years ago
parent
commit
3b09f26e68
  1. 9
      framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs
  2. 24
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs
  3. 4
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs
  4. 6
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpDynamicClaimsPrincipalContributor.cs

9
framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs

@ -63,20 +63,15 @@ public class AbpSecurityModule : AbpModule
private static void AutoAddClaimsPrincipalContributors(IServiceCollection services) private static void AutoAddClaimsPrincipalContributors(IServiceCollection services)
{ {
var contributorTypes = new List<Type>(); var contributorTypes = new List<Type>();
var dynamicContributorTypes = new List<Type>();
services.OnRegistered(context => services.OnRegistered(context =>
{ {
if (typeof(IAbpClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType) && if (typeof(IAbpClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType))
!typeof(IAbpDynamicClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType))
{ {
contributorTypes.Add(context.ImplementationType); contributorTypes.Add(context.ImplementationType);
} }
});
var dynamicContributorTypes = new List<Type>();
services.OnRegistered(context =>
{
if (typeof(IAbpDynamicClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType)) if (typeof(IAbpDynamicClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType))
{ {
dynamicContributorTypes.Add(context.ImplementationType); dynamicContributorTypes.Add(context.ImplementationType);

24
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs

@ -2,7 +2,6 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.Collections;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Security.Claims; namespace Volo.Abp.Security.Claims;
@ -24,15 +23,15 @@ public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientD
public virtual async Task<ClaimsPrincipal> CreateAsync(ClaimsPrincipal? existsClaimsPrincipal = null) public virtual async Task<ClaimsPrincipal> CreateAsync(ClaimsPrincipal? existsClaimsPrincipal = null)
{ {
return await InternalCreateAsync(Options.Contributors, existsClaimsPrincipal); return await InternalCreateAsync(Options, existsClaimsPrincipal, false);
} }
public virtual async Task<ClaimsPrincipal> CreateDynamicAsync(ClaimsPrincipal? existsClaimsPrincipal = null) public virtual async Task<ClaimsPrincipal> CreateDynamicAsync(ClaimsPrincipal? existsClaimsPrincipal = null)
{ {
return await InternalCreateAsync(Options.DynamicContributors, existsClaimsPrincipal); return await InternalCreateAsync(Options, existsClaimsPrincipal, true);
} }
public virtual async Task<ClaimsPrincipal> InternalCreateAsync(ITypeList<IAbpClaimsPrincipalContributor> contributorTypes, ClaimsPrincipal? existsClaimsPrincipal = null) public virtual async Task<ClaimsPrincipal> InternalCreateAsync(AbpClaimsPrincipalFactoryOptions options, ClaimsPrincipal? existsClaimsPrincipal = null, bool isDynamic = false)
{ {
using (var scope = ServiceScopeFactory.CreateScope()) using (var scope = ServiceScopeFactory.CreateScope())
{ {
@ -43,10 +42,21 @@ public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientD
var context = new AbpClaimsPrincipalContributorContext(claimsPrincipal, scope.ServiceProvider); var context = new AbpClaimsPrincipalContributorContext(claimsPrincipal, scope.ServiceProvider);
foreach (var contributorType in contributorTypes) if (!isDynamic)
{ {
var contributor = (IAbpClaimsPrincipalContributor)scope.ServiceProvider.GetRequiredService(contributorType); foreach (var contributorType in options.Contributors)
await contributor.ContributeAsync(context); {
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; return context.ClaimsPrincipal;

4
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs

@ -8,7 +8,7 @@ public class AbpClaimsPrincipalFactoryOptions
{ {
public ITypeList<IAbpClaimsPrincipalContributor> Contributors { get; } public ITypeList<IAbpClaimsPrincipalContributor> Contributors { get; }
public ITypeList<IAbpClaimsPrincipalContributor> DynamicContributors { get; } public ITypeList<IAbpDynamicClaimsPrincipalContributor> DynamicContributors { get; }
public List<string> DynamicClaims { get; } public List<string> DynamicClaims { get; }
@ -19,7 +19,7 @@ public class AbpClaimsPrincipalFactoryOptions
public AbpClaimsPrincipalFactoryOptions() public AbpClaimsPrincipalFactoryOptions()
{ {
Contributors = new TypeList<IAbpClaimsPrincipalContributor>(); Contributors = new TypeList<IAbpClaimsPrincipalContributor>();
DynamicContributors = new TypeList<IAbpClaimsPrincipalContributor>(); DynamicContributors = new TypeList<IAbpDynamicClaimsPrincipalContributor>();
DynamicClaims = new List<string> DynamicClaims = new List<string>
{ {

6
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpDynamicClaimsPrincipalContributor.cs

@ -1,6 +1,8 @@
using System.Threading.Tasks;
namespace Volo.Abp.Security.Claims; namespace Volo.Abp.Security.Claims;
public interface IAbpDynamicClaimsPrincipalContributor : IAbpClaimsPrincipalContributor public interface IAbpDynamicClaimsPrincipalContributor
{ {
Task ContributeAsync(AbpClaimsPrincipalContributorContext context);
} }

Loading…
Cancel
Save