using NetAdmin.Domain.Dto.Sys.User; 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(QueryUserRsp user) { return new ContextUserToken { Id = user.Id, Token = user.Token, UserName = user.UserName, DeptId = user.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(); } }