🍒 fix(LazyServer): 修复懒加载服务异常的问题
This commit is contained in:
parent
b5b03b90ca
commit
002bc90c81
@ -188,7 +188,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
|
||||
/// <returns></returns>
|
||||
private LoggingUserInfo GetUserInfo(LoggingMonitorDto loggingMonitor)
|
||||
{
|
||||
var userManger = LazyHelper.GetService<UserManager>();
|
||||
var userManger = LazyHelper.GetService<UserManager>().Value;
|
||||
LoggingUserInfo result = new();
|
||||
if (loggingMonitor.AuthorizationClaims != null)
|
||||
{
|
||||
|
||||
@ -42,7 +42,7 @@ public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter, IDisposable
|
||||
return;
|
||||
|
||||
// 获取当前操作者
|
||||
var userManager = LazyHelper.GetService<UserManager>();
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
string account = "", realName = "", userId = "", tenantId = "";
|
||||
if (loggingMonitor.authorizationClaims != null)
|
||||
{
|
||||
|
||||
@ -38,7 +38,7 @@ public class HttpLoggingHandler : DelegatingHandler, ITransient
|
||||
if (!enabledLog || attr?.IgnoreLog == true) return await base.SendAsync(request, cancellationToken);
|
||||
|
||||
var stopWatch = Stopwatch.StartNew();
|
||||
var userManger = LazyHelper.GetService<UserManager>();
|
||||
var userManger = LazyHelper.GetService<UserManager>().Value;
|
||||
var urlList = request.RequestUri?.LocalPath.Split("/") ?? [];
|
||||
var sysLogHttp = new SysLogHttp
|
||||
{
|
||||
|
||||
@ -288,9 +288,11 @@ public class SysAuthService : IDynamicApiController, ITransient
|
||||
user.SysPos ??= await db.Queryable<SysPos>().FirstAsync(u => u.Id == user.PosId);
|
||||
user.SysOrg ??= await db.Queryable<SysOrg>().FirstAsync(u => u.Id == user.OrgId);
|
||||
|
||||
var permissions = await LazyHelper.GetService<SysRoleService>().GetUserApiList(user.Id);
|
||||
var unauthorizedPermissions = await LazyHelper.GetService<SysRoleService>().GetUnAuthApiList(user.Id);
|
||||
var orgIds = await LazyHelper.GetService<SysOrgService>().GetUserOrgIdList(user.Id, user.OrgId);
|
||||
var sysRoleService = LazyHelper.GetService<SysRoleService>().Value;
|
||||
var sysOrgService = LazyHelper.GetService<SysOrgService>().Value;
|
||||
var permissions = await sysRoleService.GetUserApiList(user.Id);
|
||||
var unauthorizedPermissions = await sysRoleService.GetUnAuthApiList(user.Id);
|
||||
var orgIds = await sysOrgService.GetUserOrgIdList(user.Id, user.OrgId);
|
||||
var roleIds = await db.Queryable<SysUserRole>().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
|
||||
var postIds = await db.Queryable<SysUserExtOrg>().Where(u => u.UserId == user.Id).Select(u => u.PosId).ToListAsync() ?? [];
|
||||
var maxDataScope = await db.Queryable<SysRole>().Where(u => roleIds.Contains(u.Id)).MinAsync(u => u.DataScope);
|
||||
@ -321,7 +323,7 @@ public class SysAuthService : IDynamicApiController, ITransient
|
||||
RoleIds = roleIds,
|
||||
Permissions = permissions,
|
||||
UnauthorizedPermissions = unauthorizedPermissions,
|
||||
AppPermissions = loginMode == LoginModeEnum.APP ? LazyHelper.GetService<SysCommonService>().GetAppApiList() : null,
|
||||
AppPermissions = loginMode == LoginModeEnum.APP ? LazyHelper.GetService<SysCommonService>().Value.GetAppApiList() : null,
|
||||
MaxDataScope = user.AccountType == AccountTypeEnum.SuperAdmin ? DataScopeEnum.All : maxDataScope,
|
||||
ExtProps = App.GetServices<IUserSessionExtProps>().SelectMany(u => u.GetInitExtProps(user)).ToDictionary(u => u.Key, u => u.Value)
|
||||
});
|
||||
|
||||
@ -431,7 +431,8 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
public void Clear()
|
||||
{
|
||||
// 超管用户操作,清空所有缓存
|
||||
if (LazyHelper.GetService<UserManager>().SuperAdmin)
|
||||
var userManager = App.GetService<UserManager>();
|
||||
if (userManager.SuperAdmin)
|
||||
{
|
||||
_cacheProvider.Cache.Clear();
|
||||
Cache.Default.Clear();
|
||||
|
||||
@ -211,7 +211,7 @@ public class UserManager(
|
||||
if (long.TryParse(userId.ToString(), out long tempId)) userId = tempId;
|
||||
else return null;
|
||||
}
|
||||
LazyHelper.GetService<SysAuthService>().RefreshSession(userId).GetAwaiter().GetResult();
|
||||
LazyHelper.GetService<SysAuthService>().Value.RefreshSession(userId).GetAwaiter().GetResult();
|
||||
}
|
||||
return sysCacheService.Get<UserSessionDao>(CacheConst.KeyUserSession + userId);
|
||||
}
|
||||
|
||||
@ -584,7 +584,7 @@ public static class SqlSugarExtension
|
||||
|
||||
// 使用线程安全的延迟初始化服务实例获取文本缩写
|
||||
var abbrValue = LazyHelper.GetService<SysCommonService>()
|
||||
.GetNameAbbr(new() { Text = value, All = attribute.SaveFullAbbr })
|
||||
.Value.GetNameAbbr(new() { Text = value, All = attribute.SaveFullAbbr })
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
entityInfo.SetValue(abbrValue);
|
||||
@ -634,7 +634,7 @@ public static class SqlSugarExtension
|
||||
|
||||
// 使用线程安全的延迟初始化服务实例获取流水号
|
||||
var serial = LazyHelper.GetService<SysSerialService>()
|
||||
.NextSeqNo(attribute.Type, attribute.IsGlobal)
|
||||
.Value.NextSeqNo(attribute.Type, attribute.IsGlobal)
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
entityInfo.SetValue(serial);
|
||||
|
||||
@ -59,7 +59,8 @@ public static class SqlSugarFilter
|
||||
if (string.IsNullOrWhiteSpace(userId)) return;
|
||||
|
||||
// 获取用户session
|
||||
var session = LazyHelper.GetService<UserManager>().GetSessionOrRefresh(userId);
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
var session = userManager.GetSessionOrRefresh(userId);
|
||||
if (session == null) return;
|
||||
|
||||
// 配置用户机构集合缓存
|
||||
@ -113,7 +114,8 @@ public static class SqlSugarFilter
|
||||
if (string.IsNullOrWhiteSpace(userId)) return maxDataScope;
|
||||
|
||||
// 获取用户session
|
||||
var session = LazyHelper.GetService<UserManager>().GetSessionOrRefresh(userId);
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
var session = userManager.GetSessionOrRefresh(userId);
|
||||
if (session == null) return (int)DataScopeEnum.Self;
|
||||
|
||||
// 获取用户最大数据范围---仅本人数据
|
||||
|
||||
@ -37,7 +37,8 @@ public class SqlSugarRepository<T> : SimpleClient<T>, ISqlSugarRepository<T> whe
|
||||
return;
|
||||
|
||||
// 若未贴任何表特性或当前未登录或是默认租户Id,则返回默认库连接
|
||||
var tenantId = LazyHelper.GetService<UserManager>().TenantId?.ToString();
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
var tenantId = userManager.TenantId?.ToString();
|
||||
if (string.IsNullOrWhiteSpace(tenantId) || tenantId == SqlSugarConst.MainConfigId) return;
|
||||
|
||||
// 根据租户Id切换库连接, 为空则返回默认库连接
|
||||
|
||||
@ -215,7 +215,7 @@ public static class SqlSugarSetup
|
||||
Log.Warning(log);
|
||||
};
|
||||
|
||||
var userManager = LazyHelper.GetService<UserManager>();
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
// 数据审计
|
||||
dbProvider.Aop.DataExecuting = (oldValue, entityInfo) =>
|
||||
{
|
||||
|
||||
@ -6,18 +6,29 @@
|
||||
|
||||
namespace Admin.NET.Core;
|
||||
|
||||
/// <summary>
|
||||
/// 懒加载帮助类
|
||||
/// </summary>
|
||||
public class LazyHelper
|
||||
{
|
||||
private static readonly Dictionary<Type, Lazy<object>> _cache = new();
|
||||
private static readonly ConcurrentDictionary<Type, Lazy<object>> Cache = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取服务
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public static T GetService<T>() where T : class
|
||||
public static Lazy<T> GetService<T>() where T : class
|
||||
{
|
||||
if (_cache.TryGetValue(typeof(T), out var lazy)) return (T)lazy.Value;
|
||||
return (T)(_cache[typeof(T)] = new Lazy<object>(() => App.GetService<T>())).Value;
|
||||
try
|
||||
{
|
||||
var lazy = Cache.GetOrAdd(typeof(T), _ => new Lazy<object>(() => App.GetService<T>()));
|
||||
return (Lazy<T>)(object)lazy;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Cache.Remove(typeof(T), out _);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -91,7 +91,8 @@ namespace Admin.NET.Web.Core
|
||||
}
|
||||
|
||||
// 验证租户有效期
|
||||
var tenantId = LazyHelper.GetService<UserManager>().TenantId?.ToString();
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
var tenantId = userManager.TenantId?.ToString();
|
||||
if (!string.IsNullOrWhiteSpace(tenantId))
|
||||
{
|
||||
var tenant = sysCacheService.Get<List<SysTenant>>(CacheConst.KeyTenant)?.FirstOrDefault(u => u.Id == long.Parse(tenantId));
|
||||
@ -117,7 +118,7 @@ namespace Admin.NET.Web.Core
|
||||
/// <returns></returns>
|
||||
private static async Task<bool> CheckAuthorizeAsync(DefaultHttpContext httpContext)
|
||||
{
|
||||
var userManager = LazyHelper.GetService<UserManager>();
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
|
||||
// 排除超管权限判断
|
||||
if (userManager?.AccountType == AccountTypeEnum.SuperAdmin) return true;
|
||||
|
||||
@ -61,7 +61,7 @@ public class SuperApiAop : DefaultSuperApiAop
|
||||
var paths = api?.Url?.Split('/');
|
||||
var actionName = paths?[^1];
|
||||
|
||||
var userManager = LazyHelper.GetService<UserManager>();
|
||||
var userManager = LazyHelper.GetService<UserManager>().Value;
|
||||
var apiInfo = new
|
||||
{
|
||||
requestUrl = api?.Url,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user