Browse Source

Add IAbpClaimsIdentityService

pull/7165/head
liangshiwei 6 years ago
parent
commit
82da72e844
  1. 36
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimsIdentityService.cs
  2. 7
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/ClaimsIdentityContext.cs
  3. 10
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsIdentityService.cs
  4. 20
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs

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

@ -0,0 +1,36 @@
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);
}
}
}
}
}

7
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/ClaimsIdentityContext.cs

@ -1,17 +1,20 @@
using System;
using System.Security.Claims;
using JetBrains.Annotations;
namespace Volo.Abp.Security.Claims
{
public class ClaimsIdentityContext
{
[NotNull]
public ClaimsIdentity ClaimsIdentity { get; }
[NotNull]
public IServiceProvider ServiceProvider { get; }
public ClaimsIdentityContext(
ClaimsIdentity claimsIdentity,
IServiceProvider serviceProvider)
[NotNull] ClaimsIdentity claimsIdentity,
[NotNull] IServiceProvider serviceProvider)
{
ClaimsIdentity = claimsIdentity;
ServiceProvider = serviceProvider;

10
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/IAbpClaimsIdentityService.cs

@ -0,0 +1,10 @@
using System.Security.Claims;
using System.Threading.Tasks;
namespace Volo.Abp.Security.Claims
{
public interface IAbpClaimsIdentityService
{
Task AddClaimsAsync(ClaimsIdentity identity);
}
}

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

@ -17,22 +17,19 @@ namespace Volo.Abp.Identity
public class AbpUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>,
ITransientDependency
{
protected AbpClaimOptions ClaimOptions { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected IAbpClaimsIdentityService AbpClaimsIdentityService { get; }
public AbpUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options,
IOptions<AbpClaimOptions> claimOptions,
IServiceScopeFactory serviceScopeFactory)
IAbpClaimsIdentityService abpClaimsIdentityService)
: base(
userManager,
roleManager,
options)
{
ServiceScopeFactory = serviceScopeFactory;
ClaimOptions = claimOptions.Value;
AbpClaimsIdentityService = abpClaimsIdentityService;
}
[UnitOfWork]
@ -71,16 +68,7 @@ namespace Volo.Abp.Identity
identity.AddIfNotContains(new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString()));
using (var scope = ServiceScopeFactory.CreateScope())
{
var context = new ClaimsIdentityContext(identity, scope.ServiceProvider);
foreach (var contributorType in ClaimOptions.ClaimsIdentityContributors)
{
var contributor = (IClaimsIdentityContributor) scope.ServiceProvider.GetRequiredService(contributorType);
await contributor.AddClaimsAsync(context);
}
}
await AbpClaimsIdentityService.AddClaimsAsync(identity);
return principal;
}

Loading…
Cancel
Save