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 Microsoft.AspNetCore.SignalR; |
||||
using Volo.Abp.DependencyInjection; |
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Security.Claims; |
||||
using Volo.Abp.Users; |
using Volo.Abp.Users; |
||||
|
|
||||
namespace Volo.Abp.AspNetCore.SignalR |
namespace Volo.Abp.AspNetCore.SignalR |
||||
{ |
{ |
||||
public class AbpSignalRUserIdProvider : IUserIdProvider, ITransientDependency |
public class AbpSignalRUserIdProvider : IUserIdProvider, ITransientDependency |
||||
{ |
{ |
||||
public ICurrentUser CurrentUser { get; } |
private readonly ICurrentPrincipalAccessor _currentPrincipalAccessor; |
||||
|
|
||||
public AbpSignalRUserIdProvider(ICurrentUser currentUser) |
private readonly ICurrentUser _currentUser; |
||||
|
|
||||
|
public AbpSignalRUserIdProvider(ICurrentPrincipalAccessor currentPrincipalAccessor, ICurrentUser currentUser) |
||||
{ |
{ |
||||
CurrentUser = currentUser; |
_currentPrincipalAccessor = currentPrincipalAccessor; |
||||
|
_currentUser = currentUser; |
||||
} |
} |
||||
|
|
||||
public virtual string GetUserId(HubConnectionContext connection) |
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 |
namespace Volo.Abp.Security.Claims |
||||
{ |
{ |
||||
public interface ICurrentPrincipalAccessor |
public interface ICurrentPrincipalAccessor |
||||
{ |
{ |
||||
ClaimsPrincipal Principal { get; } |
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