mirror of https://github.com/abpframework/abp.git
committed by
GitHub
8 changed files with 111 additions and 17 deletions
@ -1,21 +1,28 @@ |
|||
using Microsoft.AspNetCore.SignalR; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Security.Claims; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace Volo.Abp.AspNetCore.SignalR |
|||
{ |
|||
public class AbpSignalRUserIdProvider : IUserIdProvider, ITransientDependency |
|||
{ |
|||
public ICurrentUser CurrentUser { get; } |
|||
|
|||
public AbpSignalRUserIdProvider(ICurrentUser currentUser) |
|||
private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; |
|||
|
|||
private readonly ICurrentUser _currentUser; |
|||
|
|||
public AbpSignalRUserIdProvider(ICurrentPrincipalAccessor currentPrincipalAccessor, ICurrentUser currentUser) |
|||
{ |
|||
CurrentUser = currentUser; |
|||
_currentPrincipalAccessor = currentPrincipalAccessor; |
|||
_currentUser = currentUser; |
|||
} |
|||
|
|||
public virtual string GetUserId(HubConnectionContext connection) |
|||
{ |
|||
return CurrentUser.Id?.ToString(); |
|||
using (_currentPrincipalAccessor.Change(connection.User)) |
|||
{ |
|||
return _currentUser.Id?.ToString(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -1,9 +1,12 @@ |
|||
using System.Security.Claims; |
|||
using System; |
|||
using System.Security.Claims; |
|||
|
|||
namespace Volo.Abp.Security.Claims |
|||
{ |
|||
public interface ICurrentPrincipalAccessor |
|||
{ |
|||
ClaimsPrincipal Principal { get; } |
|||
|
|||
IDisposable Change(ClaimsPrincipal principal); |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,50 @@ |
|||
using System.Collections.Generic; |
|||
using System.Security.Claims; |
|||
using Shouldly; |
|||
using Volo.Abp.Testing; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.Security.Claims |
|||
{ |
|||
public class CurrentPrincipalAccessor_Test : AbpIntegratedTest<AbpSecurityTestModule> |
|||
{ |
|||
private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; |
|||
|
|||
public CurrentPrincipalAccessor_Test() |
|||
{ |
|||
_currentPrincipalAccessor = GetRequiredService<ICurrentPrincipalAccessor>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_Get_Changed_Principal_If() |
|||
{ |
|||
var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim> |
|||
{ |
|||
new Claim(ClaimTypes.Name,"bob"), |
|||
new Claim(ClaimTypes.NameIdentifier,"123456") |
|||
})); |
|||
|
|||
var claimsPrincipal2 = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim> |
|||
{ |
|||
new Claim(ClaimTypes.Name,"lee"), |
|||
new Claim(ClaimTypes.NameIdentifier,"654321") |
|||
})); |
|||
|
|||
|
|||
_currentPrincipalAccessor.Principal.ShouldBe(null); |
|||
|
|||
using (_currentPrincipalAccessor.Change(claimsPrincipal)) |
|||
{ |
|||
_currentPrincipalAccessor.Principal.ShouldBe(claimsPrincipal); |
|||
|
|||
using (_currentPrincipalAccessor.Change(claimsPrincipal2)) |
|||
{ |
|||
_currentPrincipalAccessor.Principal.ShouldBe(claimsPrincipal2); |
|||
} |
|||
|
|||
_currentPrincipalAccessor.Principal.ShouldBe(claimsPrincipal); |
|||
} |
|||
_currentPrincipalAccessor.Principal.ShouldBeNull(); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue