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

Loading…
Cancel
Save