Browse Source

Refactor AbpClaimsPrincipalFactory.

pull/7165/head
maliming 6 years ago
parent
commit
e6cbd21e4f
  1. 1
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfiguration.cs
  2. 8
      framework/src/Volo.Abp.Security/Volo/Abp/Security/AbpSecurityModule.cs
  3. 14
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimOptions.cs
  4. 36
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsIdentityService.cs
  5. 10
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalContributorContext.cs
  6. 40
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactory.cs
  7. 14
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalFactoryOptions.cs
  8. 9
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsPrincipalContributor.cs
  9. 4
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsPrincipalFactory.cs
  10. 9
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IClaimsIdentityContributor.cs
  11. 13
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs

1
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfiguration.cs

@ -1,7 +1,6 @@
using System;
using JetBrains.Annotations;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.MultiTenancy
{

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

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
@ -55,15 +55,15 @@ namespace Volo.Abp.Security
services.OnRegistred(context =>
{
if (typeof(IClaimsIdentityContributor).IsAssignableFrom(context.ImplementationType))
if (typeof(IAbpClaimsPrincipalContributor).IsAssignableFrom(context.ImplementationType))
{
contributorTypes.Add(context.ImplementationType);
}
});
services.Configure<AbpClaimOptions>(options =>
services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.ClaimsIdentityContributors.AddIfNotContains(contributorTypes);
options.Contributors.AddIfNotContains(contributorTypes);
});
}
}

14
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimOptions.cs

@ -1,14 +0,0 @@
using Volo.Abp.Collections;
namespace Volo.Abp.Security.Claims
{
public class AbpClaimOptions
{
public ITypeList<IClaimsIdentityContributor> ClaimsIdentityContributors { get; set; }
public AbpClaimOptions()
{
ClaimsIdentityContributors = new TypeList<IClaimsIdentityContributor>();
}
}
}

36
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsIdentityService.cs

@ -1,36 +0,0 @@
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Security.Claims
{
public class AbpClaimsIdentityService : IAbpClaimsIdentityService, ITransientDependency
{
protected AbpClaimOptions Options { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
public AbpClaimsIdentityService(
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpClaimOptions> abpClaimOptions)
{
ServiceScopeFactory = serviceScopeFactory;
Options = abpClaimOptions.Value;
}
public async Task AddClaimsAsync(ClaimsIdentity identity)
{
using (var scope = ServiceScopeFactory.CreateScope())
{
var context = new ClaimsIdentityContext(identity, scope.ServiceProvider);
foreach (var contributorType in Options.ClaimsIdentityContributors)
{
var contributor = (IClaimsIdentityContributor) scope.ServiceProvider.GetRequiredService(contributorType);
await contributor.AddClaimsAsync(context);
}
}
}
}
}

10
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/ClaimsIdentityContext.cs → framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsPrincipalContributorContext.cs

@ -4,19 +4,19 @@ using JetBrains.Annotations;
namespace Volo.Abp.Security.Claims
{
public class ClaimsIdentityContext
public class AbpClaimsPrincipalContributorContext
{
[NotNull]
public ClaimsIdentity ClaimsIdentity { get; }
public ClaimsPrincipal ClaimsPrincipal { get; }
[NotNull]
public IServiceProvider ServiceProvider { get; }
public ClaimsIdentityContext(
[NotNull] ClaimsIdentity claimsIdentity,
public AbpClaimsPrincipalContributorContext(
[NotNull] ClaimsPrincipal claimsIdentity,
[NotNull] IServiceProvider serviceProvider)
{
ClaimsIdentity = claimsIdentity;
ClaimsPrincipal = claimsIdentity;
ServiceProvider = serviceProvider;
}
}

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

@ -0,0 +1,40 @@
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Security.Claims
{
public class AbpClaimsPrincipalFactory : IAbpClaimsPrincipalFactory, ITransientDependency
{
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected AbpClaimsPrincipalFactoryOptions Options { get; }
public AbpClaimsPrincipalFactory(
IServiceScopeFactory serviceScopeFactory,
IOptions<AbpClaimsPrincipalFactoryOptions> abpClaimOptions)
{
ServiceScopeFactory = serviceScopeFactory;
Options = abpClaimOptions.Value;
}
public virtual async Task<ClaimsPrincipal> CreateAsync()
{
using (var scope = ServiceScopeFactory.CreateScope())
{
var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity());
var context = new AbpClaimsPrincipalContributorContext(claimsPrincipal, scope.ServiceProvider);
foreach (var contributorType in Options.Contributors)
{
var contributor = (IAbpClaimsPrincipalContributor) scope.ServiceProvider.GetRequiredService(contributorType);
await contributor.ContributeAsync(context);
}
return claimsPrincipal;
}
}
}
}

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

@ -0,0 +1,14 @@
using Volo.Abp.Collections;
namespace Volo.Abp.Security.Claims
{
public class AbpClaimsPrincipalFactoryOptions
{
public ITypeList<IAbpClaimsPrincipalContributor> Contributors { get; }
public AbpClaimsPrincipalFactoryOptions()
{
Contributors = new TypeList<IAbpClaimsPrincipalContributor>();
}
}
}

9
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsPrincipalContributor.cs

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

4
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsIdentityService.cs → framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsPrincipalFactory.cs

@ -3,8 +3,8 @@ using System.Threading.Tasks;
namespace Volo.Abp.Security.Claims
{
public interface IAbpClaimsIdentityService
public interface IAbpClaimsPrincipalFactory
{
Task AddClaimsAsync(ClaimsIdentity identity);
Task<ClaimsPrincipal> CreateAsync();
}
}

9
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IClaimsIdentityContributor.cs

@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace Volo.Abp.Security.Claims
{
public interface IClaimsIdentityContributor
{
Task AddClaimsAsync(ClaimsIdentityContext context);
}
}

13
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs

@ -8,7 +8,6 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Security.Claims;
using Volo.Abp.Uow;
@ -17,19 +16,19 @@ namespace Volo.Abp.Identity
public class AbpUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>,
ITransientDependency
{
protected IAbpClaimsIdentityService AbpClaimsIdentityService { get; }
protected IAbpClaimsPrincipalFactory AbpClaimsPrincipalFactory { get; }
public AbpUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options,
IAbpClaimsIdentityService abpClaimsIdentityService)
IAbpClaimsPrincipalFactory abpClaimsPrincipalFactory)
: base(
userManager,
roleManager,
options)
{
AbpClaimsIdentityService = abpClaimsIdentityService;
AbpClaimsPrincipalFactory = abpClaimsPrincipalFactory;
}
[UnitOfWork]
@ -68,7 +67,11 @@ namespace Volo.Abp.Identity
identity.AddIfNotContains(new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString()));
await AbpClaimsIdentityService.AddClaimsAsync(identity);
var abpClaimsPrincipal = await AbpClaimsPrincipalFactory.CreateAsync();
foreach (var claim in abpClaimsPrincipal.Claims)
{
identity.AddIfNotContains(claim);
}
return principal;
}

Loading…
Cancel
Save