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)
{
var contributorTypes = new List<Type>();
var dynamicContributorTypes = new List<Type>();
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<Type>();
services.OnRegistered(context =>
{
if (typeof(IAbpDynamicClaimsPrincipalContributor).IsAssignableFrom(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 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<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)
{
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())
{
@ -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;

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> DynamicContributors { get; }
public ITypeList<IAbpDynamicClaimsPrincipalContributor> DynamicContributors { get; }
public List<string> DynamicClaims { get; }
@ -19,7 +19,7 @@ public class AbpClaimsPrincipalFactoryOptions
public AbpClaimsPrincipalFactoryOptions()
{
Contributors = new TypeList<IAbpClaimsPrincipalContributor>();
DynamicContributors = new TypeList<IAbpClaimsPrincipalContributor>();
DynamicContributors = new TypeList<IAbpDynamicClaimsPrincipalContributor>();
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;
public interface IAbpDynamicClaimsPrincipalContributor : IAbpClaimsPrincipalContributor
public interface IAbpDynamicClaimsPrincipalContributor
{
Task ContributeAsync(AbpClaimsPrincipalContributorContext context);
}

Loading…
Cancel
Save