UNIVPLMDataIntegration/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs
2025-09-03 08:25:19 +08:00

235 lines
6.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using System.Text.Json;
namespace Admin.NET.Core;
/// <summary>
/// 当前登录用户信息
/// </summary>
public class UserManager(
SysCacheService sysCacheService,
IHttpContextAccessor httpContextAccessor) : UserSessionDao, IScoped
{
/// <summary>
/// 用户Session
/// </summary>
[System.Text.Json.Serialization.JsonIgnore]
[Newtonsoft.Json.JsonIgnore]
protected virtual UserSessionDao _session { get; set; }
/// <summary>
/// 代理对象
/// </summary>
[System.Text.Json.Serialization.JsonIgnore]
[Newtonsoft.Json.JsonIgnore]
protected virtual UserSessionDao Session
{
get
{
if (_session == null || _session.UserId != UserId) _session = sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + UserId);
return _session;
}
}
/// <summary>
/// 用户Id
/// </summary>
[System.Text.Json.Serialization.JsonIgnore]
[Newtonsoft.Json.JsonIgnore]
public override long UserId => (httpContextAccessor.HttpContext?.User.FindFirst(nameof(UserId))?.Value).ToLong();
/// <summary>
/// Token版本号
/// </summary>
[System.Text.Json.Serialization.JsonIgnore]
[Newtonsoft.Json.JsonIgnore]
public override int TokenVersion => (httpContextAccessor.HttpContext?.User.FindFirst(nameof(UserId))?.Value).ToInt();
/// <summary>
/// 应用Id
/// </summary>
public override long? AppId => Session?.AppId;
/// <summary>
/// 租户Id
/// </summary>
public override long? TenantId => Session?.TenantId;
/// <summary>
/// 用户账号
/// </summary>
public override string Account => Session?.Account;
/// <summary>
/// 真实姓名
/// </summary>
public override string RealName => Session?.RealName;
/// <summary>
/// 昵称
/// </summary>
public override string NickName => Session?.NickName;
/// <summary>
/// 账号类型
/// </summary>
public override AccountTypeEnum? AccountType => Session?.AccountType;
/// <summary>
/// 组织机构Id
/// </summary>
public override long OrgId => Session?.OrgId ?? 0;
/// <summary>
/// 组织机构名称
/// </summary>
public override string OrgName => Session?.OrgName;
/// <summary>
/// 组织机构Id
/// </summary>
public override string OrgType => Session?.OrgType;
/// <summary>
/// 职位Id
/// </summary>
public override long? PosId => Session?.PosId;
/// <summary>
/// 职位名称
/// </summary>
public override string PosName => Session?.PosName;
/// <summary>
/// 职位编码
/// </summary>
public override string PosCode => Session?.PosCode;
/// <summary>
/// 组织机构级别
/// </summary>
public override int? OrgLevel => Session?.OrgLevel;
/// <summary>
/// 登录模式
/// </summary>
public override LoginModeEnum? LoginMode => Session?.LoginMode;
/// <summary>
/// 微信OpenId
/// </summary>
public override string OpenId => Session?.OpenId;
/// <summary>
/// 最大数据范围权限
/// </summary>
public override DataScopeEnum? MaxDataScope => Session?.MaxDataScope;
/// <summary>
/// 角色Id集
/// </summary>
public override List<long> RoleIds => Session?.RoleIds;
/// <summary>
/// 机构Id集
/// </summary>
public override List<long> OrgIds => Session?.OrgIds;
/// <summary>
/// 职位Id集
/// </summary>
public override List<long> PosIds => Session?.PosIds;
/// <summary>
/// 权限集
/// </summary>
public override List<string> Permissions => Session?.Permissions;
/// <summary>
/// App权限集
/// </summary>
public override List<string> AppPermissions => Session?.AppPermissions;
/// <summary>
/// 无权权限集
/// </summary>
public override List<string> UnauthorizedPermissions => Session?.UnauthorizedPermissions;
/// <summary>
/// 扩展属性
/// </summary>
public override Dictionary<string, dynamic> ExtProps => Session?.ExtProps;
/// <summary>
/// 用户Session是否存在
/// </summary>
public bool ExistSession(long userId)
{
return sysCacheService.ExistKey(CacheConst.KeyUserSession + userId);
}
/// <summary>
/// 设置用户Session
/// </summary>
public void SetSession(UserSessionDao userSession)
{
sysCacheService.Set(CacheConst.KeyUserSession + userSession.UserId, userSession);
}
/// <summary>
/// 清除指定用户Session
/// </summary>
public void RemoveSession(long userId)
{
sysCacheService.Remove(CacheConst.KeyUserSession + userId);
}
/// <summary>
/// 获取指定用户Session
/// </summary>
public UserSessionDao GetSession(dynamic userId)
{
return sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId);
}
/// <summary>
/// 获取指定用户Session如果不存在则刷新
/// </summary>
public UserSessionDao GetSessionOrRefresh(dynamic userId = null)
{
userId ??= UserId;
var session = sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId);
if (session == null)
{
if ((Nullable.GetUnderlyingType(userId.GetType()) ?? userId.GetType()) != typeof(long))
{
if (long.TryParse(userId.ToString(), out long tempId)) userId = tempId;
else return null;
}
LazyHelper.GetService<SysAuthService>().Value.RefreshSession(userId).GetAwaiter().GetResult();
}
return sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId);
}
/// <summary>
/// 获取扩展属性
/// </summary>
public T GetExtProp<T>(string key, T defaultValue = default)
{
if (ExtProps == null || !ExtProps.TryGetValue(key, out var value) || value is null) return defaultValue;
if (value is JsonElement element) return element.Deserialize<T>();
try
{
return (T)Convert.ChangeType(value, typeof(T));
}
catch
{
return defaultValue;
}
}
}