Kaynağa Gözat

!1583 消除潜在的漏洞,并修复部分因新旧代码合并后存在的bug
Merge pull request !1583 from 喵你个汪/next

喵你个汪 1 yıl önce
ebeveyn
işleme
4988328641

+ 2 - 0
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -29,6 +29,7 @@
     <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.8.0" />
+    <PackageReference Include="Microsoft.NETCore.App" Version="2.2.2" />
     <PackageReference Include="MiniExcel" Version="1.35.0" />
     <PackageReference Include="MiniWord" Version="0.8.0" />
     <PackageReference Include="NewLife.Redis" Version="6.0.2024.1202" />
@@ -42,6 +43,7 @@
     <PackageReference Include="SSH.NET" Version="2024.2.0" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.9" />
     <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.1135" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />

+ 10 - 0
Admin.NET/Admin.NET.Core/Entity/SysDictData.cs

@@ -33,6 +33,16 @@ public partial class SysDictData : EntityBase
     [SugarColumn(ColumnDescription = "值", Length = 256)]
     [Required, MaxLength(256)]
     public virtual string Value { get; set; }
+    
+    /// <summary>
+    /// 编码
+    /// </summary>
+    /// <remarks>
+    /// 即将移除的字段,直接移除该字段并不会从数据库中删除,且该字段之前是必填的,容易导致不能为null的异常,建议先保留,后期再移除
+    /// </remarks>
+    [Obsolete("即将移除的字段, 已引用的建议尽快移除")]
+    [SugarColumn(ColumnDescription = "编码", Length = 256)]
+    public virtual string? Code { get; set; }
 
     /// <summary>
     /// 名称

+ 7 - 1
Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs

@@ -91,7 +91,13 @@ public class EnumToDictJob : IJob
         foreach (var dbDictType in await db.Queryable<SysDictType>().Where(x => codeList.Contains(x.Code)).ToListAsync() ?? new())
         {
             var enumDictType = list.First(x => x.Code == dbDictType.Code);
-            if (enumDictType.Id == dbDictType.Id) continue;
+            if (enumDictType.Id == dbDictType.Id)
+            {
+                // 字典值表字段改变后每条字典值记录会多出一条,此处用于删除多余的字典值数据
+                var dataValueList = enumDictType.Children.Select(e => e.Value).ToList();
+                await db.Deleteable<SysDictData>().Where(x => x.DictTypeId == dbDictType.Id && !dataValueList.Contains(x.Value)).ExecuteCommandAsync();
+                continue;
+            }
 
             // 数据不一致则删除
             await db.Deleteable<SysDictData>().Where(x => x.DictTypeId == dbDictType.Id).ExecuteCommandAsync();