Просмотр исходного кода

feat: 增加超级管理员是否忽略软删除过滤器配置项

喵你个旺呀 1 год назад
Родитель
Сommit
c76109888f

+ 1 - 0
Admin.NET/Admin.NET.Application/Configuration/Database.json

@@ -4,6 +4,7 @@
   // 详细数据库配置见SqlSugar官网(第一个为默认库),极力推荐 PostgreSQL 数据库
   // 数据库连接字符串参考地址:https://www.connectionstrings.com/
   "DbConnection": {
+    "SuperAdminIgnoreIDeletedFilter": false, // 超级管理员是否忽略逻辑删除过滤器
     "EnableConsoleSql": false, // 启用控制台打印SQL
     "ConnectionConfigs": [
       {

+ 5 - 0
Admin.NET/Admin.NET.Core/Option/DbConnectionOptions.cs

@@ -16,6 +16,11 @@ public sealed class DbConnectionOptions : IConfigurableOptions<DbConnectionOptio
     /// </summary>
     public bool EnableConsoleSql { get; set; }
 
+    /// <summary>
+    /// 超级管理员是否忽略逻辑删除过滤器
+    /// </summary>
+    public bool SuperAdminIgnoreIDeletedFilter { get; set; }
+
     /// <summary>
     /// 数据库集合
     /// </summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -676,7 +676,7 @@ public class SysTenantService : IDynamicApiController, ITransient
 
             var sqlSugarScopeProvider = iTenant.GetConnectionScope(tenantId.ToString());
             SqlSugarSetup.SetDbConfig(tenantConnConfig);
-            SqlSugarSetup.SetDbAop(sqlSugarScopeProvider, dbOptions.EnableConsoleSql);
+            SqlSugarSetup.SetDbAop(sqlSugarScopeProvider, dbOptions.EnableConsoleSql, dbOptions.SuperAdminIgnoreIDeletedFilter);
 
             return sqlSugarScopeProvider;
         }

+ 11 - 7
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -45,7 +45,7 @@ public static class SqlSugarSetup
             dbOptions.ConnectionConfigs.ForEach(config =>
             {
                 var dbProvider = db.GetConnectionScope(config.ConfigId);
-                SetDbAop(dbProvider, dbOptions.EnableConsoleSql);
+                SetDbAop(dbProvider, dbOptions.EnableConsoleSql, dbOptions.SuperAdminIgnoreIDeletedFilter);
                 SetDbDiffLog(dbProvider, config);
             });
         });
@@ -119,7 +119,8 @@ public static class SqlSugarSetup
     /// </summary>
     /// <param name="db"></param>
     /// <param name="enableConsoleSql"></param>
-    public static void SetDbAop(SqlSugarScopeProvider db, bool enableConsoleSql)
+    /// <param name="superAdminIgnoreIDeletedFilter"></param>
+    public static void SetDbAop(SqlSugarScopeProvider db, bool enableConsoleSql, bool superAdminIgnoreIDeletedFilter)
     {
         // 设置超时时间
         db.Ado.CommandTimeOut = 30;
@@ -248,12 +249,15 @@ public static class SqlSugarSetup
             }
         };
 
-        // 超管排除其他过滤器
-        if (App.User?.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString())
-            return;
+        // 是否为超级管理员
+        var isSuperAdmin = App.User?.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString();
+
+        // 配置假删除过滤器,如果当前用户是超级管理员并且允许忽略软删除过滤器则不会应用
+        if (!isSuperAdmin || !superAdminIgnoreIDeletedFilter)
+            db.QueryFilter.AddTableFilter<IDeletedFilter>(u => u.IsDelete == false);
 
-        // 配置假删除过滤器
-        db.QueryFilter.AddTableFilter<IDeletedFilter>(u => u.IsDelete == false);
+        // 超管排除其他过滤器
+        if (isSuperAdmin) return;
 
         // 配置租户过滤器
         var tenantId = App.User?.FindFirst(ClaimConst.TenantId)?.Value;