namespace NetAdmin.Domain.Contexts;
///
/// 上下文用户凭据
///
public sealed record ContextUserToken : DataAbstraction
{
///
/// 部门编号
///
/// ReSharper disable once MemberCanBePrivate.Global
public long DeptId { get; init; }
///
/// 用户编号
///
/// ReSharper disable once MemberCanBePrivate.Global
public long Id { get; init; }
///
/// 做授权验证的Token,全局唯一,可以随时重置(强制下线)
///
/// ReSharper disable once MemberCanBePrivate.Global
public Guid Token { get; init; }
///
/// 用户名
///
/// ReSharper disable once MemberCanBePrivate.Global
public string UserName { get; init; }
///
/// 从HttpContext 创建上下文用户
///
public static ContextUserToken Create()
{
var claim = App.User?.FindFirst(nameof(ContextUserToken));
return claim?.Value.ToObject();
}
///
/// 从 QueryUserRsp 创建上下文用户
///
public static ContextUserToken Create(long id, Guid token, string userName, long deptId)
{
return new ContextUserToken { Id = id, Token = token, UserName = userName, DeptId = deptId };
}
///
/// 从 Json Web Token 创建上下文用户
///
public static ContextUserToken Create(string jwt)
{
var claim = JWTEncryption.ReadJwtToken(jwt.TrimPrefix($"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} "))
?.Claims.FirstOrDefault(x => x.Type == nameof(ContextUserToken));
return claim?.Value.ToObject();
}
}