ソースを参照

😎升级依赖及清理代码

zuohuaijun 1 年間 前
コミット
0ce94384fc

+ 7 - 7
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -19,9 +19,9 @@
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.17.1" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.20" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.20" />
-    <PackageReference Include="Furion.Pure" Version="4.9.7.20" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.22" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.22" />
+    <PackageReference Include="Furion.Pure" Version="4.9.7.22" />
 	<PackageReference Include="Hardware.Info" Version="101.0.1" />
     <PackageReference Include="Hashids.net" Version="1.7.0" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
@@ -30,23 +30,23 @@
     <PackageReference Include="Magicodes.IE.Excel" Version="2.7.5.2" />
     <PackageReference Include="Magicodes.IE.Pdf" Version="2.7.5.2" />
     <PackageReference Include="Magicodes.IE.Word" Version="2.7.5.2" />
-    <PackageReference Include="MailKit" Version="4.10.0" />
+    <PackageReference Include="MailKit" Version="4.11.0" />
     <PackageReference Include="MiniExcel" Version="1.38.0" />
     <PackageReference Include="MiniWord" Version="0.9.2" />
     <PackageReference Include="NewLife.Redis" Version="6.1.2025.301" />
-    <PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="3.6.0" />
+    <PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="4.0.0" />
 	<PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.2.0" />
     <PackageReference Include="QRCoder" Version="1.6.0" />
     <PackageReference Include="RabbitMQ.Client" Version="7.1.1" />
     <PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.3" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.7.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.10.0" />
-    <PackageReference Include="SqlSugarCore" Version="5.1.4.180" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.4.182" />
     <PackageReference Include="SSH.NET" Version="2024.2.0" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.0.2" />
     <PackageReference Include="System.Net.Http" Version="4.3.4" />
     <PackageReference Include="System.Private.Uri" Version="4.3.2" />
-    <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1189" />
+    <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1194" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
     <PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" Aliases="BouncyCastleV2" />

+ 38 - 49
Admin.NET/Admin.NET.Core/Service/Auth/SysLdapService.cs

@@ -11,24 +11,14 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 系统域登录配置服务 🧩
 /// </summary>
-[ApiDescriptionSettings(Order = 496)]
+[ApiDescriptionSettings(Order = 496, Description = "域登录配置")]
 public class SysLdapService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysLdap> _sysLdapRep;
-    private readonly SysUserLdapService _sysUserLdapService;
-    private readonly SysOrgService _sysOrgService;
-    private readonly UserManager _userManager;
-
-    public SysLdapService(
-        SqlSugarRepository<SysLdap> sysLdapRep,
-        SysUserLdapService sysUserLdapService,
-        SysOrgService sysOrgService,
-        UserManager userManager)
+
+    public SysLdapService(SqlSugarRepository<SysLdap> sysLdapRep)
     {
         _sysLdapRep = sysLdapRep;
-        _userManager = userManager;
-        _sysOrgService = sysOrgService;
-        _sysUserLdapService = sysUserLdapService;
     }
 
     /// <summary>
@@ -40,7 +30,6 @@ public class SysLdapService : IDynamicApiController, ITransient
     public async Task<SqlSugarPagedList<SysLdap>> Page(SysLdapInput input)
     {
         return await _sysLdapRep.AsQueryable()
-            .WhereIF(_userManager.SuperAdmin && input.TenantId > 0, u => u.TenantId == input.TenantId)
             .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Host.Contains(input.Keyword.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.Host), u => u.Host.Contains(input.Host.Trim()))
             .OrderBy(u => u.CreateTime, OrderByType.Desc)
@@ -123,21 +112,21 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="tenantId">租户</param>
     /// <returns></returns>
     [NonAction]
-    public async Task<bool> AuthAccount(long tenantId, string account, string password)
+    public async Task<bool> AuthAccount(long? tenantId, string account, string password)
     {
         var sysLdap = await _sysLdapRep.GetFirstAsync(u => u.TenantId == tenantId) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
         var ldapConn = new LdapConnection();
         try
         {
-            ldapConn.Connect(sysLdap.Host, sysLdap.Port);
+            await ldapConn.ConnectAsync(sysLdap.Host, sysLdap.Port);
             string bindPass = CryptogramUtil.Decrypt(sysLdap.BindPass);
-            ldapConn.Bind(sysLdap.Version, sysLdap.BindDn, bindPass);
-            var ldapSearchResults = ldapConn.Search(sysLdap.BaseDn, LdapConnection.ScopeSub, sysLdap.AuthFilter.Replace("%s", account), null, false);
+            await ldapConn.BindAsync(sysLdap.Version, sysLdap.BindDn, bindPass);
+            var ldapSearchResults = await ldapConn.SearchAsync(sysLdap.BaseDn, LdapConnection.ScopeSub, sysLdap.AuthFilter.Replace("%s", account), null, false);
             string dn = string.Empty;
-            while (ldapSearchResults.HasMore())
+            while (await ldapSearchResults.HasMoreAsync())
             {
-                var ldapEntry = ldapSearchResults.Next();
-                var sAmAccountName = ldapEntry.GetAttribute(sysLdap.BindAttrAccount)?.StringValue;
+                var ldapEntry = await ldapSearchResults.NextAsync();
+                var sAmAccountName = ldapEntry.GetAttributeSet().GetAttribute(sysLdap.BindAttrAccount)?.StringValue;
                 if (string.IsNullOrEmpty(sAmAccountName)) continue;
                 dn = ldapEntry.Dn;
                 break;
@@ -145,7 +134,7 @@ public class SysLdapService : IDynamicApiController, ITransient
 
             if (string.IsNullOrEmpty(dn)) throw Oops.Oh(ErrorCodeEnum.D1002);
             // var attr = new LdapAttribute("userPassword", password);
-            ldapConn.Bind(dn, password);
+            await ldapConn.BindAsync(dn, password);
         }
         catch (LdapException e)
         {
@@ -174,7 +163,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     public async Task<List<SysUserLdap>> SyncUserTenant(long tenantId)
     {
         var sysLdap = await _sysLdapRep.GetFirstAsync(c => c.TenantId == tenantId && c.IsDelete == false && c.Status == StatusEnum.Enable) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        return await SyncUser(sysLdap);
+        return await SysLdapService.SyncUser(sysLdap);
     }
 
     /// <summary>
@@ -186,7 +175,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     public async Task<List<SysUserLdap>> SyncUser(SyncSysLdapInput input)
     {
         var sysLdap = await _sysLdapRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        return await SyncUser(sysLdap);
+        return await SysLdapService.SyncUser(sysLdap);
     }
 
     /// <summary>
@@ -194,23 +183,23 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="sysLdap"></param>
     /// <returns></returns>
-    private async Task<List<SysUserLdap>> SyncUser(SysLdap sysLdap)
+    private static async Task<List<SysUserLdap>> SyncUser(SysLdap sysLdap)
     {
         if (sysLdap == null) throw Oops.Oh(ErrorCodeEnum.D1002);
         var ldapConn = new LdapConnection();
         try
         {
-            ldapConn.Connect(sysLdap.Host, sysLdap.Port);
+            await ldapConn.ConnectAsync(sysLdap.Host, sysLdap.Port);
             string bindPass = CryptogramUtil.Decrypt(sysLdap.BindPass);
-            ldapConn.Bind(sysLdap.Version, sysLdap.BindDn, bindPass);
-            var ldapSearchResults = ldapConn.Search(sysLdap.BaseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
+            await ldapConn.BindAsync(sysLdap.Version, sysLdap.BindDn, bindPass);
+            var ldapSearchResults = await ldapConn.SearchAsync(sysLdap.BaseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
             var userLdapList = new List<SysUserLdap>();
-            while (ldapSearchResults.HasMore())
+            while (await ldapSearchResults.HasMoreAsync())
             {
                 LdapEntry ldapEntry;
                 try
                 {
-                    ldapEntry = ldapSearchResults.Next();
+                    ldapEntry = await ldapSearchResults.NextAsync();
                     if (ldapEntry == null) continue;
                 }
                 catch (LdapException)
@@ -222,7 +211,7 @@ public class SysLdapService : IDynamicApiController, ITransient
                 var deptCode = GetDepartmentCode(attrs, sysLdap.BindAttrCode);
                 if (attrs.Count == 0 || attrs.ContainsKey("OU"))
                 {
-                    SearchDnLdapUser(ldapConn, sysLdap, userLdapList, ldapEntry.Dn, deptCode);
+                    await SearchDnLdapUser(ldapConn, sysLdap, userLdapList, ldapEntry.Dn, deptCode);
                 }
                 else
                 {
@@ -235,7 +224,7 @@ public class SysLdapService : IDynamicApiController, ITransient
 
             if (userLdapList.Count == 0) return null;
 
-            await _sysUserLdapService.InsertUserLdapList(sysLdap.TenantId!.Value, userLdapList);
+            await App.GetRequiredService<SysUserLdapService>().InsertUserLdapList(sysLdap.TenantId!.Value, userLdapList);
             return userLdapList;
         }
         catch (LdapException e)
@@ -301,15 +290,15 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="userLdapList"></param>
     /// <param name="baseDn"></param>
     /// <param name="deptCode"></param>
-    private static void SearchDnLdapUser(LdapConnection ldapConn, SysLdap sysLdap, List<SysUserLdap> userLdapList, string baseDn, string deptCode)
+    private static async Task SearchDnLdapUser(LdapConnection ldapConn, SysLdap sysLdap, List<SysUserLdap> userLdapList, string baseDn, string deptCode)
     {
-        var ldapSearchResults = ldapConn.Search(baseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
-        while (ldapSearchResults.HasMore())
+        var ldapSearchResults = await ldapConn.SearchAsync(baseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
+        while (await ldapSearchResults.HasMoreAsync())
         {
             LdapEntry ldapEntry;
             try
             {
-                ldapEntry = ldapSearchResults.Next();
+                ldapEntry = await ldapSearchResults.NextAsync();
                 if (ldapEntry == null) continue;
             }
             catch (LdapException)
@@ -321,7 +310,7 @@ public class SysLdapService : IDynamicApiController, ITransient
             deptCode = GetDepartmentCode(attrs, sysLdap.BindAttrCode);
 
             if (attrs.Count == 0 || attrs.ContainsKey("OU"))
-                SearchDnLdapUser(ldapConn, sysLdap, userLdapList, ldapEntry.Dn, deptCode);
+                await SearchDnLdapUser(ldapConn, sysLdap, userLdapList, ldapEntry.Dn, deptCode);
             else
             {
                 var sysUserLdap = CreateSysUserLdap(attrs, sysLdap.BindAttrAccount, sysLdap.BindAttrEmployeeId, deptCode);
@@ -345,17 +334,17 @@ public class SysLdapService : IDynamicApiController, ITransient
         var ldapConn = new LdapConnection();
         try
         {
-            ldapConn.Connect(sysLdap.Host, sysLdap.Port);
+            await ldapConn.ConnectAsync(sysLdap.Host, sysLdap.Port);
             string bindPass = CryptogramUtil.Decrypt(sysLdap.BindPass);
-            ldapConn.Bind(sysLdap.Version, sysLdap.BindDn, bindPass);
-            var ldapSearchResults = ldapConn.Search(sysLdap.BaseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
+            await ldapConn.BindAsync(sysLdap.Version, sysLdap.BindDn, bindPass);
+            var ldapSearchResults = await ldapConn.SearchAsync(sysLdap.BaseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
             var orgList = new List<SysOrg>();
-            while (ldapSearchResults.HasMore())
+            while (await ldapSearchResults.HasMoreAsync())
             {
                 LdapEntry ldapEntry;
                 try
                 {
-                    ldapEntry = ldapSearchResults.Next();
+                    ldapEntry = await ldapSearchResults.NextAsync();
                     if (ldapEntry == null) continue;
                 }
                 catch (LdapException)
@@ -369,13 +358,13 @@ public class SysLdapService : IDynamicApiController, ITransient
                 var sysOrg = CreateSysOrg(attrs, sysLdap, orgList, new SysOrg { Id = 0, Level = 0 });
                 orgList.Add(sysOrg);
 
-                SearchDnLdapDept(ldapConn, sysLdap, orgList, ldapEntry.Dn, sysOrg);
+                await SearchDnLdapDept(ldapConn, sysLdap, orgList, ldapEntry.Dn, sysOrg);
             }
 
             if (orgList.Count == 0)
                 return;
 
-            await _sysOrgService.BatchAddOrgs(orgList);
+            await App.GetRequiredService<SysOrgService>().BatchAddOrgs(orgList);
         }
         catch (LdapException e)
         {
@@ -399,15 +388,15 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="listOrgs"></param>
     /// <param name="baseDn"></param>
     /// <param name="org"></param>
-    private static void SearchDnLdapDept(LdapConnection ldapConn, SysLdap sysLdap, List<SysOrg> listOrgs, string baseDn, SysOrg org)
+    private static async Task SearchDnLdapDept(LdapConnection ldapConn, SysLdap sysLdap, List<SysOrg> listOrgs, string baseDn, SysOrg org)
     {
-        var ldapSearchResults = ldapConn.Search(baseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
-        while (ldapSearchResults.HasMore())
+        var ldapSearchResults = await ldapConn.SearchAsync(baseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
+        while (await ldapSearchResults.HasMoreAsync())
         {
             LdapEntry ldapEntry;
             try
             {
-                ldapEntry = ldapSearchResults.Next();
+                ldapEntry = await ldapSearchResults.NextAsync();
                 if (ldapEntry == null) continue;
             }
             catch (LdapException)
@@ -421,7 +410,7 @@ public class SysLdapService : IDynamicApiController, ITransient
             var sysOrg = CreateSysOrg(attrs, sysLdap, listOrgs, org);
             listOrgs.Add(sysOrg);
 
-            SearchDnLdapDept(ldapConn, sysLdap, listOrgs, ldapEntry.Dn, sysOrg);
+            await SearchDnLdapDept(ldapConn, sysLdap, listOrgs, ldapEntry.Dn, sysOrg);
         }
     }
 

+ 1 - 1
Admin.NET/Admin.NET.Test/Admin.NET.Test.csproj

@@ -12,7 +12,7 @@
     </PropertyGroup>
 
     <ItemGroup>
-      <PackageReference Include="Furion.Xunit" Version="4.9.7.20" />
+      <PackageReference Include="Furion.Xunit" Version="4.9.7.22" />
       <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
       <PackageReference Include="Selenium.Support" Version="4.29.0" />
       <PackageReference Include="Selenium.WebDriver" Version="4.29.0" />

+ 2 - 2
Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj

@@ -24,9 +24,9 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="DocumentFormat.OpenXml" Version="3.2.0" />
+    <PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
     <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.13.0" />
-    <PackageReference Include="Rezero.Api" Version="1.7.13" />
+    <PackageReference Include="Rezero.Api" Version="1.7.14" />
   </ItemGroup>
 
   <ItemGroup>

+ 17 - 17
Web/package.json

@@ -2,7 +2,7 @@
 	"name": "admin.net",
 	"type": "module",
 	"version": "2.4.33",
-	"lastBuildTime": "2025.03.02",
+	"lastBuildTime": "2025.03.10",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
 	"author": "zuohuaijun",
 	"license": "MIT",
@@ -24,22 +24,22 @@
 		"@vue-office/docx": "^1.6.3",
 		"@vue-office/excel": "^1.7.14",
 		"@vue-office/pdf": "^2.0.10",
-		"@vueuse/core": "^12.7.0",
+		"@vueuse/core": "^13.0.0",
 		"@wangeditor/editor": "^5.1.23",
 		"@wangeditor/editor-for-vue": "^5.1.12",
 		"animate.css": "^4.1.1",
 		"async-validator": "^4.2.5",
-		"axios": "^1.8.1",
+		"axios": "^1.8.2",
 		"countup.js": "^2.8.0",
 		"cropperjs": "^1.6.2",
 		"echarts": "^5.6.0",
 		"echarts-gl": "^2.0.9",
 		"echarts-wordcloud": "^2.1.0",
-		"element-plus": "^2.9.5",
-		"ezuikit-js": "^8.1.6",
+		"element-plus": "^2.9.6",
+		"ezuikit-js": "^8.1.7",
 		"js-cookie": "^3.0.5",
 		"js-table2excel": "^1.1.2",
-		"json-editor-vue": "^0.18.0",
+		"json-editor-vue": "^0.18.1",
 		"jsplumb": "^2.15.6",
 		"lodash-es": "^4.17.21",
 		"md-editor-v3": "^5.3.2",
@@ -56,7 +56,7 @@
 		"screenfull": "^6.0.2",
 		"sm-crypto-v2": "^1.9.3",
 		"sortablejs": "^1.15.6",
-		"splitpanes": "^3.1.8",
+		"splitpanes": "^4.0.2",
 		"vcrontab-3": "^3.3.22",
 		"vform3-builds": "^3.0.10",
 		"vue": "^3.5.13",
@@ -64,7 +64,7 @@
 		"vue-demi": "^0.14.10",
 		"vue-draggable-plus": "^0.6.0",
 		"vue-grid-layout": "3.0.0-beta1",
-		"vue-i18n": "^11.1.1",
+		"vue-i18n": "^11.1.2",
 		"vue-json-pretty": "^2.4.0",
 		"vue-plugin-hiprint": "0.0.59-beta2",
 		"vue-router": "^4.5.0",
@@ -75,29 +75,29 @@
 	"devDependencies": {
 		"@plugin-web-update-notification/vite": "^2.0.0",
 		"@types/lodash-es": "^4.17.12",
-		"@types/node": "^22.13.8",
+		"@types/node": "^22.13.10",
 		"@types/nprogress": "^0.2.3",
 		"@types/sortablejs": "^1.15.8",
-		"@typescript-eslint/eslint-plugin": "^8.25.0",
-		"@typescript-eslint/parser": "^8.25.0",
+		"@typescript-eslint/eslint-plugin": "^8.26.0",
+		"@typescript-eslint/parser": "^8.26.0",
 		"@vitejs/plugin-vue": "^5.2.1",
 		"@vitejs/plugin-vue-jsx": "^4.1.1",
 		"@vue/compiler-sfc": "^3.5.13",
-		"code-inspector-plugin": "^0.20.1",
-		"eslint": "^9.21.0",
-		"eslint-plugin-vue": "^9.32.0",
+		"code-inspector-plugin": "^0.20.2",
+		"eslint": "^9.22.0",
+		"eslint-plugin-vue": "^10.0.0",
 		"globals": "^16.0.0",
 		"less": "^4.2.2",
-		"prettier": "^3.5.2",
+		"prettier": "^3.5.3",
 		"rollup-plugin-visualizer": "^5.14.0",
 		"sass": "^1.85.1",
 		"terser": "^5.39.0",
 		"typescript": "^5.8.2",
-		"vite": "^6.2.0",
+		"vite": "^6.2.1",
 		"vite-plugin-cdn-import": "^1.0.1",
 		"vite-plugin-compression2": "^1.3.3",
 		"vite-plugin-vue-setup-extend": "^0.4.0",
-		"vue-eslint-parser": "^9.4.3"
+		"vue-eslint-parser": "^10.1.1"
 	},
 	"browserslist": [
 		"> 1%",