This commit is contained in:
xiaolipro 2026-06-09 15:37:52 +08:00
parent 96724376a6
commit 20b95da384
2 changed files with 0 additions and 127 deletions

View File

@ -1,73 +0,0 @@
using System.Security.Claims;
using Fake.Security.Claims;
using FluentAssertions;
using Oms.Tests.Support;
using SimpleAdmin.Api;
namespace Oms.Tests;
public class SimpleCurrentUserTests
{
[Fact]
public void GetId_ShouldPreferNumericUserIdClaim()
{
var currentUser = CreateCurrentUser(
[
new Claim(FakeClaimTypes.UserId, "42"),
new Claim("mapId", "99"),
new Claim("customerId", "100")
]);
currentUser.GetId<long>().Should().Be(42);
currentUser.GetId<int>().Should().Be(42);
}
[Fact]
public void GetId_ShouldFallBackToMapIdWhenUserIdIsGuid()
{
var currentUser = CreateCurrentUser(
[
new Claim(FakeClaimTypes.UserId, Guid.NewGuid().ToString()),
new Claim("mapId", "88")
]);
currentUser.GetId<long>().Should().Be(88);
currentUser.GetId<int>().Should().Be(88);
}
[Fact]
public void GetId_ShouldFallBackToCustomerIdWhenMapIdMissing()
{
var currentUser = CreateCurrentUser(
[
new Claim(FakeClaimTypes.UserId, Guid.NewGuid().ToString()),
new Claim("customerId", "77")
]);
currentUser.GetId<long>().Should().Be(77);
}
[Fact]
public void Id_ShouldKeepGuidIdentitySemantics()
{
var guid = Guid.NewGuid();
var currentUser = CreateCurrentUser([new Claim(FakeClaimTypes.UserId, guid.ToString())]);
currentUser.Id.Should().Be(guid);
}
[Fact]
public void GetId_ShouldReturnZeroWhenNoNumericClaimsExist()
{
var currentUser = CreateCurrentUser([new Claim(FakeClaimTypes.UserId, Guid.NewGuid().ToString())]);
currentUser.GetId<long>().Should().Be(0);
}
private static SimpleCurrentUser CreateCurrentUser(params Claim[] claims)
{
var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, authenticationType: "Test"));
var principalAccessor = new TestCurrentPrincipalAccessor(principal);
return new SimpleCurrentUser(principalAccessor);
}
}

View File

@ -1,54 +0,0 @@
using Fake.DependencyInjection;
using Fake.Security.Claims;
using Fake.Users;
namespace SimpleAdmin.Api;
/// <summary>
/// 扩展当前用户解析逻辑,支持从 OMS 业务 claims 中读取数值型主体标识。
/// </summary>
[Dependency(Replace = true)]
public class SimpleCurrentUser(ICurrentPrincipalAccessor currentPrincipalAccessor) : CurrentUser(currentPrincipalAccessor)
{
public override T GetId<T>()
{
if (typeof(T) == typeof(long))
{
var userId = base.GetId<long>();
if (userId != 0)
{
return (T)(object)userId;
}
return (T)(object)GetFallbackNumericId();
}
if (typeof(T) == typeof(int))
{
var userId = base.GetId<int>();
if (userId != 0)
{
return (T)(object)userId;
}
return (T)(object)(int)GetFallbackNumericId();
}
return base.GetId<T>()!;
}
private long GetFallbackNumericId()
{
if (long.TryParse(FindClaimOrNull(SimpleOmsClaimTypes.MapId)?.Value, out var mapId) && mapId > 0)
{
return mapId;
}
if (long.TryParse(FindClaimOrNull(SimpleOmsClaimTypes.CustomerId)?.Value, out var customerId) && customerId > 0)
{
return customerId;
}
return 0;
}
}