🍒 refactor(Core): 重命名Session,避免与传统Session概念混淆

This commit is contained in:
喵你个汪呀 2025-09-03 19:52:29 +08:00
parent 5b1034da97
commit 4bc8518199
18 changed files with 109 additions and 111 deletions

View File

@ -214,7 +214,6 @@ public class AppAuthService : IDynamicApiController, ITransient
if (string.IsNullOrWhiteSpace(_appUserManager.Account)) if (string.IsNullOrWhiteSpace(_appUserManager.Account))
throw Oops.Oh(ErrorCodeEnum.D1011); throw Oops.Oh(ErrorCodeEnum.D1011);
_appUserManager.RemoveSession(_appUserManager.UserId);
_httpContextAccessor.HttpContext.SignoutToSwagger(); _httpContextAccessor.HttpContext.SignoutToSwagger();
} }

View File

@ -9,14 +9,14 @@ using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application; namespace Admin.NET.Application;
/// <summary> /// <summary>
/// 业务层用户Session管理 /// 业务层用户状态管理
/// </summary> /// </summary>
/// <param name="sysCacheService"></param> /// <param name="sysCacheService"></param>
/// <param name="httpContextAccessor"></param> /// <param name="httpContextAccessor"></param>
public class AppUserManager( public class AppUserManager(
SysCacheService sysCacheService, SysCacheService sysCacheService,
IHttpContextAccessor httpContextAccessor) IHttpContextAccessor httpContextAccessor)
: UserManager(sysCacheService, httpContextAccessor), IUserSessionExtProps : UserManager(sysCacheService, httpContextAccessor), IUserManagerExtProps
{ {
/// <summary> /// <summary>
/// 工号 /// 工号

View File

@ -48,8 +48,8 @@ public class ApiKeyAuthenticationHandler : AuthenticationHandler<ApiKeyAuthentic
new Claim(ClaimConst.TokenVersion, "1") new Claim(ClaimConst.TokenVersion, "1")
]); ]);
// 设置用户Session缓存 // 设置用户状态缓存
if (!_userManager.ExistSession(acsInfo.Id)) await _sysAuthService.CreateToken(acsInfo.BindUser); if (!_userManager.Exist(acsInfo.Id)) await _sysAuthService.CreateToken(acsInfo.BindUser);
var user = new ClaimsPrincipal(identity); var user = new ClaimsPrincipal(identity);
return AuthenticateResult.Success(new AuthenticationTicket(user, AuthenticationScheme)); return AuthenticateResult.Success(new AuthenticationTicket(user, AuthenticationScheme));

View File

@ -19,7 +19,7 @@ public class CacheConst
/// <summary> /// <summary>
/// 用户会话缓存 /// 用户会话缓存
/// </summary> /// </summary>
public const string KeyUserSession = "sys_user_session:"; public const string KeyUserManager = "sys_user_manager:";
/// <summary> /// <summary>
/// 用户Token版本缓存 /// 用户Token版本缓存

View File

@ -197,19 +197,19 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
.GetValueOrDefault(ClaimConst.UserId) ?? "" .GetValueOrDefault(ClaimConst.UserId) ?? ""
, out var temp) ? temp : null; , out var temp) ? temp : null;
var userSession = userManger.GetSession(result.UserId); var userManager = userManger.Get(result.UserId);
result.TenantId = long.TryParse(userSession?.TenantId?.ToString() ?? "", out temp) ? temp : null; result.TenantId = long.TryParse(userManager?.TenantId?.ToString() ?? "", out temp) ? temp : null;
result.RealName = userSession?.RealName; result.RealName = userManager?.RealName;
result.Account = userSession?.Account; result.Account = userManager?.Account;
} }
// 退出登陆时没有session尝试从数据库中获取 // 退出登陆时没有用户状态尝试从userManger中获取
if (string.IsNullOrWhiteSpace(result.Account) && result.UserId != null) if (string.IsNullOrWhiteSpace(result.Account) && result.UserId != null)
{ {
var user = _db.Queryable<SysUser>().First(u => u.Id == result.UserId); var userManager = userManger.GetOrRefresh(result.UserId);
result.Account = user?.TenantId?.ToString(); result.Account =userManager?.TenantId?.ToString();
result.RealName = user?.RealName; result.RealName = userManager?.RealName;
result.Account = user?.Account; result.Account = userManager?.Account;
} }
// 用户登陆时没有userId需要根据入参获取 // 用户登陆时没有userId需要根据入参获取

View File

@ -46,17 +46,17 @@ public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter, IDisposable
string account = "", realName = "", userId = "", tenantId = ""; string account = "", realName = "", userId = "", tenantId = "";
if (loggingMonitor.authorizationClaims != null) if (loggingMonitor.authorizationClaims != null)
{ {
UserSessionDao userSession = null; UserManagerDao manager = null;
foreach (var item in loggingMonitor.authorizationClaims) foreach (var item in loggingMonitor.authorizationClaims)
{ {
if (item.type != ClaimConst.UserId) continue; if (item.type != ClaimConst.UserId) continue;
userId = item.value; userId = item.value;
userSession = userManager.Value.GetSessionOrRefresh(userId); manager = userManager.Value.GetOrRefresh(userId);
break; break;
} }
tenantId = userSession?.TenantId.ToString(); tenantId = manager?.TenantId.ToString();
realName = userSession?.RealName; realName = manager?.RealName;
account = userSession?.Account; account = manager?.Account;
} }
string remoteIPv4 = loggingMonitor.remoteIPv4; string remoteIPv4 = loggingMonitor.remoteIPv4;

View File

@ -273,8 +273,8 @@ public class SysAuthService : IDynamicApiController, ITransient
// 发布系统登录事件 // 发布系统登录事件
await _eventPublisher.PublishAsync(UserEventTypeEnum.Login, user); await _eventPublisher.PublishAsync(UserEventTypeEnum.Login, user);
// 缓存用户Session // 缓存用户状态
await SetUserSession(user, loginMode); await SetUserManager(user, loginMode);
return new LoginOutput return new LoginOutput
{ {
@ -284,11 +284,11 @@ public class SysAuthService : IDynamicApiController, ITransient
} }
/// <summary> /// <summary>
/// 设置用户Session /// 设置用户状态
/// </summary> /// </summary>
/// <param name="user"></param> /// <param name="user"></param>
/// <param name="loginMode"></param> /// <param name="loginMode"></param>
private async Task SetUserSession(SysUser user, LoginModeEnum loginMode = LoginModeEnum.PC) private async Task SetUserManager(SysUser user, LoginModeEnum loginMode = LoginModeEnum.PC)
{ {
var db = _sysUserRep.Context.CopyNew(); var db = _sysUserRep.Context.CopyNew();
user.SysPos ??= await db.Queryable<SysPos>().FirstAsync(u => u.Id == user.PosId); user.SysPos ??= await db.Queryable<SysPos>().FirstAsync(u => u.Id == user.PosId);
@ -305,8 +305,8 @@ public class SysAuthService : IDynamicApiController, ITransient
var permissions = GetUserPermissions(user, roleIds); var permissions = GetUserPermissions(user, roleIds);
var unauthorizedPermissions = GetUserUnPermissions(user, roleIds); var unauthorizedPermissions = GetUserUnPermissions(user, roleIds);
// 缓存用户Session // 缓存用户状态
_userManager.SetSession(new() _userManager.Set(new()
{ {
UserId = user.Id, UserId = user.Id,
TenantId = user.TenantId, TenantId = user.TenantId,
@ -331,7 +331,7 @@ public class SysAuthService : IDynamicApiController, ITransient
UnauthorizedPermissions = unauthorizedPermissions, UnauthorizedPermissions = unauthorizedPermissions,
DataScopeList = user.AccountType == AccountTypeEnum.SuperAdmin ? [DataScopeEnum.All] : maxDataScope, DataScopeList = user.AccountType == AccountTypeEnum.SuperAdmin ? [DataScopeEnum.All] : maxDataScope,
AppPermissions = loginMode == LoginModeEnum.APP ? LazyHelper.GetService<SysCommonService>().Value.GetAppApiList() : null, AppPermissions = loginMode == LoginModeEnum.APP ? LazyHelper.GetService<SysCommonService>().Value.GetAppApiList() : null,
ExtProps = App.GetServices<IUserSessionExtProps>().SelectMany(u => u.GetInitExtProps(user)).ToDictionary(u => u.Key, u => u.Value) ExtProps = App.GetServices<IUserManagerExtProps>().SelectMany(u => u.GetInitExtProps(user)).ToDictionary(u => u.Key, u => u.Value)
}); });
} }
@ -412,7 +412,6 @@ public class SysAuthService : IDynamicApiController, ITransient
// 发布系统退出事件 // 发布系统退出事件
await _eventPublisher.PublishAsync(UserEventTypeEnum.Logout, _userManager); await _eventPublisher.PublishAsync(UserEventTypeEnum.Logout, _userManager);
_userManager.RemoveSession(_userManager.UserId);
// 退出Swagger/设置无效Token响应头 // 退出Swagger/设置无效Token响应头
_httpContextAccessor.HttpContext.SignoutToSwagger(); _httpContextAccessor.HttpContext.SignoutToSwagger();
@ -635,13 +634,13 @@ public class SysAuthService : IDynamicApiController, ITransient
} }
/// <summary> /// <summary>
/// 刷新Session /// 刷新用户状态
/// </summary> /// </summary>
/// <param name="userId"></param> /// <param name="userId"></param>
[NonAction] [NonAction]
public async Task RefreshSession(long userId) public async Task RefreshUserManager(long userId)
{ {
var user = await _sysUserRep.AsQueryable().IgnoreTenant().Includes(u => u.SysOrg).FirstAsync(u => u.Id == userId); var user = await _sysUserRep.AsQueryable().IgnoreTenant().Includes(u => u.SysOrg).FirstAsync(u => u.Id == userId);
await SetUserSession(user, CommonHelper.IsMobile(_httpContextAccessor.HttpContext?.Request.Headers.UserAgent ?? "") ? LoginModeEnum.APP : LoginModeEnum.PC); await SetUserManager(user, CommonHelper.IsMobile(_httpContextAccessor.HttpContext?.Request.Headers.UserAgent ?? "") ? LoginModeEnum.APP : LoginModeEnum.PC);
} }
} }

View File

@ -439,10 +439,10 @@ public class SysCacheService : IDynamicApiController, ISingleton
return; return;
} }
// 排除非本租户、以及超管的Session缓存 // 排除非本租户、以及超管的 用户状态 缓存
var sysUserRep = App.GetService<SqlSugarRepository<SysUser>>(); var sysUserRep = App.GetService<SqlSugarRepository<SysUser>>();
var userIds = sysUserRep.AsQueryable().Where(u => u.AccountType != AccountTypeEnum.SuperAdmin).Select(u => u.Id).ToList().Select(u => u.ToString()).ToList(); var userIds = sysUserRep.AsQueryable().Where(u => u.AccountType != AccountTypeEnum.SuperAdmin).Select(u => u.Id).ToList().Select(u => u.ToString()).ToList();
var keys = _cacheProvider.Cache.Keys.Where(key => !key.StartsWith(CacheConst.KeyUserSession) || userIds.Any(key.EndsWith)).ToList(); var keys = _cacheProvider.Cache.Keys.Where(key => !key.StartsWith(CacheConst.KeyUserManager) || userIds.Any(key.EndsWith)).ToList();
keys.ForEach(key => _cacheProvider.Cache.Remove(key)); keys.ForEach(key => _cacheProvider.Cache.Remove(key));
} }

View File

@ -603,7 +603,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
await _db.Insertable(menus).ExecuteCommandAsync(); await _db.Insertable(menus).ExecuteCommandAsync();
// 删除角色菜单按钮缓存 // 删除角色菜单按钮缓存
_sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserSession); _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserManager);
} }
/// <summary> /// <summary>

View File

@ -169,9 +169,9 @@ public class SysOpenAccessService : IDynamicApiController, ITransient
/// <param name="openAccess"></param> /// <param name="openAccess"></param>
/// <returns></returns> /// <returns></returns>
[NonAction] [NonAction]
private async Task TryCreateSession(SysOpenAccess openAccess) private async Task TryRefreshUserManager(SysOpenAccess openAccess)
{ {
if (!_userManager.ExistSession(openAccess.Id)) await _sysAuthService.CreateToken(openAccess.BindUser); if (!_userManager.Exist(openAccess.BindUser.Id)) await _sysAuthService.RefreshUserManager(openAccess.BindUser.Id);
} }
/// <summary> /// <summary>
@ -208,7 +208,7 @@ public class SysOpenAccessService : IDynamicApiController, ITransient
new Claim(ClaimConst.UserId, openAccess.BindUserId + ""), new Claim(ClaimConst.UserId, openAccess.BindUserId + ""),
new Claim(ClaimConst.TokenVersion, openAccess.BindUser.TokenVersion + ""), new Claim(ClaimConst.TokenVersion, openAccess.BindUser.TokenVersion + ""),
]); ]);
openAccessService.TryCreateSession(openAccess).GetAwaiter().GetResult(); openAccessService.TryRefreshUserManager(openAccess).GetAwaiter().GetResult();
return Task.CompletedTask; return Task.CompletedTask;
} }
}; };

View File

@ -510,6 +510,6 @@ public class SysRoleService : IDynamicApiController, ITransient
public async Task ClearUserApiCache(long roleId) public async Task ClearUserApiCache(long roleId)
{ {
var userIdList = await _sysUserRoleService.GetUserIdList(roleId); var userIdList = await _sysUserRoleService.GetUserIdList(roleId);
foreach (var userId in userIdList) _sysCacheService.Remove(CacheConst.KeyUserSession + userId); foreach (var userId in userIdList) _sysCacheService.Remove(CacheConst.KeyUserManager + userId);
} }
} }

View File

@ -7,9 +7,9 @@
namespace Admin.NET.Core; namespace Admin.NET.Core;
/// <summary> /// <summary>
/// 用户Session属性扩展接口 /// 用户状态属性扩展接口
/// </summary> /// </summary>
public interface IUserSessionExtProps public interface IUserManagerExtProps
{ {
Dictionary<string, object> GetInitExtProps(SysUser user); Dictionary<string, object> GetInitExtProps(SysUser user);
} }

View File

@ -39,7 +39,7 @@ public class SysUserRoleService : ITransient
await _sysUserRoleRep.InsertRangeAsync(userRoles); await _sysUserRoleRep.InsertRangeAsync(userRoles);
// 清除缓存 // 清除缓存
_sysCacheService.Remove(CacheConst.KeyUserSession + input.UserId); _sysCacheService.Remove(CacheConst.KeyUserManager + input.UserId);
} }
/// <summary> /// <summary>
@ -61,7 +61,7 @@ public class SysUserRoleService : ITransient
// 清除缓存 // 清除缓存
foreach (var userId in input.UserIdList) foreach (var userId in input.UserIdList)
{ {
_sysCacheService.Remove(CacheConst.KeyUserSession + userId); _sysCacheService.Remove(CacheConst.KeyUserManager + userId);
} }
} }
@ -80,7 +80,7 @@ public class SysUserRoleService : ITransient
// 清除缓存 // 清除缓存
foreach (var userId in userIdList) foreach (var userId in userIdList)
{ {
_sysCacheService.Remove(CacheConst.KeyUserSession + userId); _sysCacheService.Remove(CacheConst.KeyUserManager + userId);
} }
await _sysUserRoleRep.DeleteAsync(u => u.RoleId == roleId); await _sysUserRoleRep.DeleteAsync(u => u.RoleId == roleId);
@ -96,7 +96,7 @@ public class SysUserRoleService : ITransient
await _sysUserRoleRep.DeleteAsync(u => u.UserId == userId); await _sysUserRoleRep.DeleteAsync(u => u.UserId == userId);
// 清除缓存 // 清除缓存
_sysCacheService.Remove(CacheConst.KeyUserSession + userId); _sysCacheService.Remove(CacheConst.KeyUserManager + userId);
} }
/// <summary> /// <summary>

View File

@ -168,8 +168,8 @@ public class SysUserService : IDynamicApiController, ITransient
// 更新域账号 // 更新域账号
await _sysUserLdapService.AddUserLdap(user.TenantId!.Value, user.Id, user.Account, input.DomainAccount); await _sysUserLdapService.AddUserLdap(user.TenantId!.Value, user.Id, user.Account, input.DomainAccount);
// 清除用户session // 清除用户状态
_userManager.RemoveSession(input.Id); _userManager.Remove(input.Id);
// 发布更新用户事件 // 发布更新用户事件
await _eventPublisher.PublishAsync(UserEventTypeEnum.Update, input); await _eventPublisher.PublishAsync(UserEventTypeEnum.Update, input);
@ -251,8 +251,8 @@ public class SysUserService : IDynamicApiController, ITransient
{ {
var count = await _sysUserRep.AsUpdateable(user) var count = await _sysUserRep.AsUpdateable(user)
.IgnoreColumns(u => new { u.CreateTime, u.Account, u.Password, u.AccountType, u.OrgId, u.PosId }).ExecuteCommandAsync(); .IgnoreColumns(u => new { u.CreateTime, u.Account, u.Password, u.AccountType, u.OrgId, u.PosId }).ExecuteCommandAsync();
// 清除用户session // 清除用户状态
_userManager.RemoveSession(user.Id); _userManager.Remove(user.Id);
return count; return count;
} }
@ -499,7 +499,7 @@ public class SysUserService : IDynamicApiController, ITransient
// 强制下线账号 // 强制下线账号
await _sysOnlineUserService.ForceOfflineByUserId(user.Id); await _sysOnlineUserService.ForceOfflineByUserId(user.Id);
// 清除用户session // 清除用户状态
_userManager.RemoveSession(user.Id); _userManager.Remove(user.Id);
} }
} }

View File

@ -13,26 +13,26 @@ namespace Admin.NET.Core;
/// </summary> /// </summary>
public class UserManager( public class UserManager(
SysCacheService sysCacheService, SysCacheService sysCacheService,
IHttpContextAccessor httpContextAccessor) : UserSessionDao, IScoped IHttpContextAccessor httpContextAccessor) : UserManagerDao, IScoped
{ {
/// <summary> /// <summary>
/// 用户Session /// 用户状态
/// </summary> /// </summary>
[System.Text.Json.Serialization.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore]
[Newtonsoft.Json.JsonIgnore] [Newtonsoft.Json.JsonIgnore]
protected virtual UserSessionDao _session { get; set; } protected virtual UserManagerDao _manager { get; set; }
/// <summary> /// <summary>
/// 代理对象 /// 代理对象
/// </summary> /// </summary>
[System.Text.Json.Serialization.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore]
[Newtonsoft.Json.JsonIgnore] [Newtonsoft.Json.JsonIgnore]
protected virtual UserSessionDao Session protected virtual UserManagerDao Manager
{ {
get get
{ {
if (_session == null || _session.UserId != UserId) _session = sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + UserId); if (_manager == null || _manager.UserId != UserId) _manager = sysCacheService.Get<UserManagerDao>(CacheConst.KeyUserManager + UserId);
return _session; return _manager;
} }
} }
@ -53,167 +53,167 @@ public class UserManager(
/// <summary> /// <summary>
/// 应用Id /// 应用Id
/// </summary> /// </summary>
public override long? AppId => Session?.AppId; public override long? AppId => Manager?.AppId;
/// <summary> /// <summary>
/// 租户Id /// 租户Id
/// </summary> /// </summary>
public override long? TenantId => Session?.TenantId; public override long? TenantId => Manager?.TenantId;
/// <summary> /// <summary>
/// 用户账号 /// 用户账号
/// </summary> /// </summary>
public override string Account => Session?.Account; public override string Account => Manager?.Account;
/// <summary> /// <summary>
/// 真实姓名 /// 真实姓名
/// </summary> /// </summary>
public override string RealName => Session?.RealName; public override string RealName => Manager?.RealName;
/// <summary> /// <summary>
/// 昵称 /// 昵称
/// </summary> /// </summary>
public override string NickName => Session?.NickName; public override string NickName => Manager?.NickName;
/// <summary> /// <summary>
/// 账号类型 /// 账号类型
/// </summary> /// </summary>
public override AccountTypeEnum? AccountType => Session?.AccountType; public override AccountTypeEnum? AccountType => Manager?.AccountType;
/// <summary> /// <summary>
/// 组织机构Id /// 组织机构Id
/// </summary> /// </summary>
public override long OrgId => Session?.OrgId ?? 0; public override long OrgId => Manager?.OrgId ?? 0;
/// <summary> /// <summary>
/// 组织机构名称 /// 组织机构名称
/// </summary> /// </summary>
public override string OrgName => Session?.OrgName; public override string OrgName => Manager?.OrgName;
/// <summary> /// <summary>
/// 组织机构Id /// 组织机构Id
/// </summary> /// </summary>
public override string OrgType => Session?.OrgType; public override string OrgType => Manager?.OrgType;
/// <summary> /// <summary>
/// 职位Id /// 职位Id
/// </summary> /// </summary>
public override long? PosId => Session?.PosId; public override long? PosId => Manager?.PosId;
/// <summary> /// <summary>
/// 职位名称 /// 职位名称
/// </summary> /// </summary>
public override string PosName => Session?.PosName; public override string PosName => Manager?.PosName;
/// <summary> /// <summary>
/// 职位编码 /// 职位编码
/// </summary> /// </summary>
public override string PosCode => Session?.PosCode; public override string PosCode => Manager?.PosCode;
/// <summary> /// <summary>
/// 组织机构级别 /// 组织机构级别
/// </summary> /// </summary>
public override int? OrgLevel => Session?.OrgLevel; public override int? OrgLevel => Manager?.OrgLevel;
/// <summary> /// <summary>
/// 登录模式 /// 登录模式
/// </summary> /// </summary>
public override LoginModeEnum? LoginMode => Session?.LoginMode; public override LoginModeEnum? LoginMode => Manager?.LoginMode;
/// <summary> /// <summary>
/// 微信OpenId /// 微信OpenId
/// </summary> /// </summary>
public override string OpenId => Session?.OpenId; public override string OpenId => Manager?.OpenId;
/// <summary> /// <summary>
/// 数据范围权限列表 /// 数据范围权限列表
/// </summary> /// </summary>
public override List<DataScopeEnum> DataScopeList => Session?.DataScopeList; public override List<DataScopeEnum> DataScopeList => Manager?.DataScopeList;
/// <summary> /// <summary>
/// 角色Id集 /// 角色Id集
/// </summary> /// </summary>
public override List<long> RoleIds => Session?.RoleIds; public override List<long> RoleIds => Manager?.RoleIds;
/// <summary> /// <summary>
/// 机构Id集 /// 机构Id集
/// </summary> /// </summary>
public override List<long> OrgIds => Session?.OrgIds; public override List<long> OrgIds => Manager?.OrgIds;
/// <summary> /// <summary>
/// 职位Id集 /// 职位Id集
/// </summary> /// </summary>
public override List<long> PosIds => Session?.PosIds; public override List<long> PosIds => Manager?.PosIds;
/// <summary> /// <summary>
/// 权限集 /// 权限集
/// </summary> /// </summary>
public override List<string> Permissions => Session?.Permissions; public override List<string> Permissions => Manager?.Permissions;
/// <summary> /// <summary>
/// App权限集 /// App权限集
/// </summary> /// </summary>
public override List<string> AppPermissions => Session?.AppPermissions; public override List<string> AppPermissions => Manager?.AppPermissions;
/// <summary> /// <summary>
/// 无权权限集 /// 无权权限集
/// </summary> /// </summary>
public override List<string> UnauthorizedPermissions => Session?.UnauthorizedPermissions; public override List<string> UnauthorizedPermissions => Manager?.UnauthorizedPermissions;
/// <summary> /// <summary>
/// 扩展属性 /// 扩展属性
/// </summary> /// </summary>
public override Dictionary<string, dynamic> ExtProps => Session?.ExtProps; public override Dictionary<string, dynamic> ExtProps => Manager?.ExtProps;
/// <summary> /// <summary>
/// 用户Session是否存在 /// 用户状态是否存在
/// </summary> /// </summary>
public bool ExistSession(long userId) public bool Exist(long userId)
{ {
return sysCacheService.ExistKey(CacheConst.KeyUserSession + userId); return sysCacheService.ExistKey(CacheConst.KeyUserManager + userId);
} }
/// <summary> /// <summary>
/// 设置用户Session /// 设置用户状态
/// </summary> /// </summary>
public void SetSession(UserSessionDao userSession) public void Set(UserManagerDao userManager)
{ {
sysCacheService.Set(CacheConst.KeyUserSession + userSession.UserId, userSession); sysCacheService.Set(CacheConst.KeyUserManager + userManager.UserId, userManager);
} }
/// <summary> /// <summary>
/// 清除指定用户Session /// 清除指定用户状态
/// </summary> /// </summary>
public void RemoveSession(long userId) public void Remove(long userId)
{ {
sysCacheService.Remove(CacheConst.KeyUserSession + userId); sysCacheService.Remove(CacheConst.KeyUserManager + userId);
} }
/// <summary> /// <summary>
/// 获取指定用户Session /// 获取指定用户状态
/// </summary> /// </summary>
public UserSessionDao GetSession(dynamic userId) public UserManagerDao Get(dynamic userId)
{ {
return sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId); return sysCacheService.Get<UserManagerDao>(CacheConst.KeyUserManager + userId);
} }
/// <summary> /// <summary>
/// 获取指定用户Session,如果不存在则刷新 /// 获取指定用户状态,如果不存在则刷新
/// </summary> /// </summary>
public UserSessionDao GetSessionOrRefresh(dynamic userId = null) public UserManagerDao GetOrRefresh(dynamic userId = null)
{ {
userId ??= UserId; userId ??= UserId;
var session = sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId); var userManager = sysCacheService.Get<UserManagerDao>(CacheConst.KeyUserManager + userId);
if (session == null) if (userManager == null)
{ {
if ((Nullable.GetUnderlyingType(userId.GetType()) ?? userId.GetType()) != typeof(long)) if ((Nullable.GetUnderlyingType(userId.GetType()) ?? userId.GetType()) != typeof(long))
{ {
if (long.TryParse(userId.ToString(), out long tempId)) userId = tempId; if (long.TryParse(userId.ToString(), out long tempId)) userId = tempId;
else return null; else return null;
} }
LazyHelper.GetService<SysAuthService>().Value.RefreshSession(userId).GetAwaiter().GetResult(); LazyHelper.GetService<SysAuthService>().Value.RefreshUserManager(userId).GetAwaiter().GetResult();
} }
return sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId); return sysCacheService.Get<UserManagerDao>(CacheConst.KeyUserManager + userId);
} }
/// <summary> /// <summary>

View File

@ -9,7 +9,7 @@ namespace Admin.NET.Core;
/// <summary> /// <summary>
/// 用户会话信息 /// 用户会话信息
/// </summary> /// </summary>
public class UserSessionDao public class UserManagerDao
{ {
/// <summary> /// <summary>
/// 用户Id /// 用户Id

View File

@ -29,8 +29,8 @@ public static class SqlSugarFilter
// 用户权限缓存(接口集合) // 用户权限缓存(接口集合)
sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}");
// 清除用户session // 清除用户状态
sysCacheService.Remove($"{CacheConst.KeyUserSession}{userId}"); sysCacheService.Remove($"{CacheConst.KeyUserManager}{userId}");
// 删除用户机构(数据范围)缓存——过滤器 // 删除用户机构(数据范围)缓存——过滤器
_cache.Remove($"db:{dbConfigId}:orgList:{userId}"); _cache.Remove($"db:{dbConfigId}:orgList:{userId}");
@ -58,9 +58,9 @@ public static class SqlSugarFilter
var userId = App.User?.FindFirst(ClaimConst.UserId)?.Value; var userId = App.User?.FindFirst(ClaimConst.UserId)?.Value;
if (string.IsNullOrWhiteSpace(userId)) return; if (string.IsNullOrWhiteSpace(userId)) return;
// 获取用户session // 获取用户状态
var session = LazyHelper.GetService<UserManager>().Value.GetSessionOrRefresh(userId); var userManager = LazyHelper.GetService<UserManager>().Value.GetOrRefresh(userId);
if (session == null) return; if (userManager == null) return;
// 配置用户机构集合缓存 // 配置用户机构集合缓存
var cacheKey = $"db:{db.CurrentConnectionConfig.ConfigId}:orgList:{userId}"; var cacheKey = $"db:{db.CurrentConnectionConfig.ConfigId}:orgList:{userId}";
@ -71,7 +71,7 @@ public static class SqlSugarFilter
if (maxDataScope == (int)DataScopeEnum.All) return; if (maxDataScope == (int)DataScopeEnum.All) return;
// 获取用户所属机构,保证同一作用域 // 获取用户所属机构,保证同一作用域
var orgIds = session.OrgIds; var orgIds = userManager.OrgIds;
if (orgIds == null || orgIds.Count == 0) return; if (orgIds == null || orgIds.Count == 0) return;
// 获取业务实体数据表 // 获取业务实体数据表
@ -112,12 +112,12 @@ public static class SqlSugarFilter
var userId = App.User?.FindFirst(ClaimConst.UserId)?.Value; var userId = App.User?.FindFirst(ClaimConst.UserId)?.Value;
if (string.IsNullOrWhiteSpace(userId)) return maxDataScope; if (string.IsNullOrWhiteSpace(userId)) return maxDataScope;
// 获取用户session // 获取用户状态
var session = LazyHelper.GetService<UserManager>().Value.GetSessionOrRefresh(userId); var userManager = LazyHelper.GetService<UserManager>().Value.GetOrRefresh(userId);
if (session == null) return (int)DataScopeEnum.Self; if (userManager == null) return (int)DataScopeEnum.Self;
// 获取用户最大数据范围--- 全部数据 -> 自定义 // 获取用户最大数据范围--- 全部数据 -> 自定义
maxDataScope = (int)session.MaxDataScope; maxDataScope = (int)userManager.MaxDataScope;
if (maxDataScope != (int)DataScopeEnum.Self) return maxDataScope; if (maxDataScope != (int)DataScopeEnum.Self) return maxDataScope;
// 配置用户数据范围缓存 // 配置用户数据范围缓存

View File

@ -68,11 +68,11 @@ namespace Admin.NET.Web.Core
return; return;
} }
// 刷新 Session // 刷新 用户状态
if (sysCacheService.NotExistKey($"{CacheConst.KeyUserSession}{userId}")) if (sysCacheService.NotExistKey($"{CacheConst.KeyUserManager}{userId}"))
{ {
var sysAuthService = serviceScope.ServiceProvider.GetRequiredService<SysAuthService>(); var sysAuthService = serviceScope.ServiceProvider.GetRequiredService<SysAuthService>();
await sysAuthService.RefreshSession(long.Parse(userId!)); await sysAuthService.RefreshUserManager(long.Parse(userId!));
return; return;
} }