Browse Source

Refactoring ICurrentPrincipalAccessor.

pull/3918/head
maliming 6 years ago
parent
commit
441e18e2f4
  1. 12
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/HttpContextCurrentPrincipalAccessor.cs
  2. 30
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/ThreadCurrentPrincipalAccessor.cs
  3. 10
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs
  4. 8
      templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs

12
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/HttpContextCurrentPrincipalAccessor.cs

@ -1,13 +1,21 @@
using Microsoft.AspNetCore.Http;
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.AspNetCore.Security.Claims
{
public class HttpContextCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
{
private readonly IHttpContextAccessor _httpContextAccessor;
public HttpContextCurrentPrincipalAccessor(IHttpContextAccessor httpContextAccessor)
{
CurrentScope.Value = () => httpContextAccessor.HttpContext?.User ?? GetThreadClaimsPrincipal();
_httpContextAccessor = httpContextAccessor;
}
protected override ClaimsPrincipal GetClaimsPrincipal()
{
return _httpContextAccessor.HttpContext?.User ?? base.GetClaimsPrincipal();
}
}
}

30
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/ThreadCurrentPrincipalAccessor.cs

@ -1,43 +1,33 @@
using System;
using System.Security.Claims;
using System.Threading;
using System.Xml.Schema;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Security.Claims
{
public class ThreadCurrentPrincipalAccessor : ICurrentPrincipalAccessor, ISingletonDependency
{
public Guid Id = Guid.NewGuid();
public ClaimsPrincipal Principal => _currentPrincipal.Value ?? GetClaimsPrincipal();
public virtual ClaimsPrincipal Principal
{
get => CurrentScope.Value?.Invoke();
set => CurrentScope.Value = () => value;
}
private readonly AsyncLocal<ClaimsPrincipal> _currentPrincipal = new AsyncLocal<ClaimsPrincipal>();
protected readonly AsyncLocal<Func<ClaimsPrincipal>> CurrentScope;
public ThreadCurrentPrincipalAccessor()
protected virtual ClaimsPrincipal GetClaimsPrincipal()
{
CurrentScope = new AsyncLocal<Func<ClaimsPrincipal>>
{
Value = GetThreadClaimsPrincipal
};
return Thread.CurrentPrincipal as ClaimsPrincipal;
}
protected ClaimsPrincipal GetThreadClaimsPrincipal()
public virtual IDisposable Change(ClaimsPrincipal principal)
{
return Thread.CurrentPrincipal as ClaimsPrincipal;
return SetCurrent(principal);
}
public virtual IDisposable Change(ClaimsPrincipal principal)
private IDisposable SetCurrent(ClaimsPrincipal principal)
{
var parentScope = Principal;
Principal = principal;
var parent = Principal;
_currentPrincipal.Value = principal;
return new DisposeAction(() =>
{
Principal = parentScope;
_currentPrincipal.Value = parent;
});
}
}

10
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs

@ -6,9 +6,13 @@ using Volo.Abp.Security.Claims;
namespace MyCompanyName.MyProjectName.Security
{
[Dependency(ReplaceServices = true)]
public class FakeCurrentPrincipalAccessor : ICurrentPrincipalAccessor, ISingletonDependency
public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
{
public ClaimsPrincipal Principal => GetPrincipal();
protected override ClaimsPrincipal GetClaimsPrincipal()
{
return GetPrincipal();
}
private ClaimsPrincipal _principal;
private ClaimsPrincipal GetPrincipal()
@ -36,4 +40,4 @@ namespace MyCompanyName.MyProjectName.Security
return _principal;
}
}
}
}

8
templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs

@ -6,9 +6,13 @@ using Volo.Abp.Security.Claims;
namespace MyCompanyName.MyProjectName.Security
{
[Dependency(ReplaceServices = true)]
public class FakeCurrentPrincipalAccessor : ICurrentPrincipalAccessor, ISingletonDependency
public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
{
public ClaimsPrincipal Principal => GetPrincipal();
protected override ClaimsPrincipal GetClaimsPrincipal()
{
return GetPrincipal();
}
private ClaimsPrincipal _principal;
private ClaimsPrincipal GetPrincipal()

Loading…
Cancel
Save