Explorar o código

租户新增数据库注册键名

zhontai %!s(int64=2) %!d(string=hai) anos
pai
achega
dfee620c31
Modificáronse 30 ficheiros con 159 adicións e 362 borrados
  1. 7 9
      src/hosts/ZhonTai.Host/Configs/dbconfig.json
  2. 19 17
      src/hosts/ZhonTai.Host/InitData/Admin/ad_role.json
  3. 22 20
      src/hosts/ZhonTai.Host/InitData/Admin/ad_role.tenant.json
  4. 0 4
      src/hosts/ZhonTai.Host/InitData/Admin/ad_staff.json
  5. 0 5
      src/hosts/ZhonTai.Host/InitData/Admin/ad_staff.tenant.json
  6. 2 19
      src/hosts/ZhonTai.Host/InitData/Admin/ad_tenant.json
  7. 4 18
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user.json
  8. 1 18
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user.tenant.json
  9. 0 5
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user_org.json
  10. 0 10
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user_role.json
  11. 1 1
      src/platform/ZhonTai.Admin/Core/Attributes/TransactionAttribute.cs
  12. 2 2
      src/platform/ZhonTai.Admin/Core/Auth/ClaimAttributes.cs
  13. 2 2
      src/platform/ZhonTai.Admin/Core/Auth/IUser.cs
  14. 7 6
      src/platform/ZhonTai.Admin/Core/Auth/User.cs
  15. 5 5
      src/platform/ZhonTai.Admin/Core/Consts/DbKeys.cs
  16. 5 6
      src/platform/ZhonTai.Admin/Core/Db/DBServiceCollectionExtensions.cs
  17. 17 17
      src/platform/ZhonTai.Admin/Core/Db/FreeSqlCloudExtesions.cs
  18. 3 4
      src/platform/ZhonTai.Admin/Core/Db/Transaction/UnitOfWorkManagerCloud.cs
  19. 5 0
      src/platform/ZhonTai.Admin/Core/Dto/CreateFreeSqlTenantDto.cs
  20. 0 33
      src/platform/ZhonTai.Admin/Core/Entities/DataIsolationType.cs
  21. 2 2
      src/platform/ZhonTai.Admin/Core/HostApp.cs
  22. 4 8
      src/platform/ZhonTai.Admin/Domain/Tenant/TenantEntity.cs
  23. 4 8
      src/platform/ZhonTai.Admin/Services/Auth/AuthService.cs
  24. 2 2
      src/platform/ZhonTai.Admin/Services/Auth/Dto/AuthLoginOutput.cs
  25. 1 1
      src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs
  26. 2 8
      src/platform/ZhonTai.Admin/Services/Tenant/Dto/TenantAddInput.cs
  27. 1 31
      src/platform/ZhonTai.Admin/Services/Tenant/Dto/TenantListOutput.cs
  28. 16 8
      src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs
  29. 5 13
      src/platform/ZhonTai.Admin/Services/User/UserService.cs
  30. 20 80
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

+ 7 - 9
src/hosts/ZhonTai.Host/Configs/dbconfig.json

@@ -37,13 +37,11 @@
   //PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=admindb;Pooling=true;Minimum Pool Size=1"
   //Sqlite "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1"
   "connectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
+
   //指定程序集
   //FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector
   "providerType": "",
 
-  //空闲时间(分)
-  "idleTime": 10,
-
   //多数据库
   //定义MultiDbKeys枚举
   //使用仓储访问 public ModuleRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.MultiDbKey + MultiDbKeys.DbKey, muowm)
@@ -62,11 +60,11 @@
 
   //读写分离从库列表
   "slaveList": [
-    {
-      //连接字符串
-      "ConnectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
-      //权重
-      "Weight": 1
-    }
+    //{
+    //  //连接字符串
+    //  "ConnectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
+    //  //权重
+    //  "Weight": 1
+    //}
   ]
 }

+ 19 - 17
src/hosts/ZhonTai.Host/InitData/Admin/ad_role.json

@@ -1,4 +1,9 @@
 [
+  {
+    "id": 336557474730053,
+    "name": "系统默认",
+    "sort": 1
+  },
   {
     "id": 161223412080709,
     "parentId": 336557474730053,
@@ -6,31 +11,28 @@
     "code": "main-admin",
     "description": ""
   },
-  {
-    "id": 162083448594501,
-    "name": "管理员",
-    "code": "admin"
-  },
-  {
-    "id": 162605510979653,
-    "parentId": 336557578817605,
-    "name": "普通员工",
-    "code": "emp",
-    "description": ""
-  },
-  {
-    "id": 336557474730053,
-    "name": "系统默认",
-    "sort": 1
-  },
   {
     "id": 336557508276293,
     "name": "职务",
     "sort": 2
   },
+  {
+    "id": 340428577087557,
+    "parentId": 336557508276293,
+    "name": "IT",
+    "code": "it",
+    "description": ""
+  },
   {
     "id": 336557578817605,
     "name": "岗位",
     "sort": 3
+  },
+  {
+    "id": 162605510979653,
+    "parentId": 336557578817605,
+    "name": "普通员工",
+    "code": "emp",
+    "description": ""
   }
 ]

+ 22 - 20
src/hosts/ZhonTai.Host/InitData/Admin/ad_role.tenant.json

@@ -1,4 +1,10 @@
 [
+  {
+    "id": 336557474730053,
+    "tenantId": 161223412138053,
+    "name": "系统默认",
+    "sort": 1
+  },
   {
     "id": 161223412080709,
     "tenantId": 161223412138053,
@@ -7,36 +13,32 @@
     "code": "main-admin",
     "description": ""
   },
-  {
-    "id": 162083448594501,
-    "tenantId": 162083448455237,
-    "name": "管理员",
-    "code": "admin"
-  },
-  {
-    "id": 162605510979653,
-    "tenantId": 161223412138053,
-    "parentId": 336557578817605,
-    "name": "普通员工",
-    "code": "emp",
-    "description": ""
-  },
-  {
-    "id": 336557474730053,
-    "tenantId": 161223412138053,
-    "name": "系统默认",
-    "sort": 1
-  },
   {
     "id": 336557508276293,
     "tenantId": 161223412138053,
     "name": "职务",
     "sort": 2
   },
+  {
+    "id": 340428577087557,
+    "tenantId": 161223412138053,
+    "parentId": 336557508276293,
+    "name": "IT",
+    "code": "it",
+    "description": ""
+  },
   {
     "id": 336557578817605,
     "tenantId": 161223412138053,
     "name": "岗位",
     "sort": 3
+  },
+  {
+    "id": 162605510979653,
+    "tenantId": 161223412138053,
+    "parentId": 336557578817605,
+    "name": "普通员工",
+    "code": "emp",
+    "description": ""
   }
 ]

+ 0 - 4
src/hosts/ZhonTai.Host/InitData/Admin/ad_staff.json

@@ -2,9 +2,5 @@
   {
     "id": 161223411986501,
     "sex": 0
-  },
-  {
-    "id": 162605614280773,
-    "sex": 0
   }
 ]

+ 0 - 5
src/hosts/ZhonTai.Host/InitData/Admin/ad_staff.tenant.json

@@ -3,10 +3,5 @@
     "id": 161223411986501,
     "tenantId": 161223412138053,
     "sex": 0
-  },
-  {
-    "id": 162605614280773,
-    "tenantId": 161223412138053,
-    "sex": 0
   }
 ]

+ 2 - 19
src/hosts/ZhonTai.Host/InitData/Admin/ad_tenant.json

@@ -4,29 +4,12 @@
     "name": "中台",
     "code": "zhontai",
     "realName": "小雪",
-    "phone": "18988889999",
+    "phone": "13122223333",
     "email": "xiaoxue@zhontai.com",
     "userId": 161223411986501,
     "roleId": 161223412080709,
     "tenantType": 1,
-    "dataIsolationType": 4,
-    "dbType": 4,
-    "connectionString": "Data Source=|DataDirectory|\\\\admindb.db; Pooling=true;Min Pool Size=1",
-    "idleTime": 10,
-    "enabled": true,
-    "description": ""
-  },
-  {
-    "id": 162083448455237,
-    "name": "企业",
-    "code": "qiye",
-    "realName": "租户",
-    "phone": "18988889999",
-    "email": "tenant@qiye.com",
-    "userId": 162083448746053,
-    "roleId": 162083448594501,
-    "tenantType": 2,
-    "dataIsolationType": 4,
+    "dbKey":  "masterdb",
     "dbType": 4,
     "connectionString": "Data Source=|DataDirectory|\\\\admindb.db; Pooling=true;Min Pool Size=1",
     "idleTime": 10,

+ 4 - 18
src/hosts/ZhonTai.Host/InitData/Admin/ad_user.json

@@ -3,25 +3,11 @@
     "id": 161223411986501,
     "userName": "admin",
     "password": "96E79218965EB72C92A549DD5A330112",
-    "name": "管理员",
+    "name":  "管理员",
+    "nickName": "小雪",
     "mobile": "13122223333",
+    "email": "xiaoxue@zhontai.com",
     "mainOrgId": 189097691009093,
-    "type":  100
-  },
-  {
-    "id": 162083448746053,
-    "userName": "18988889999",
-    "password": "96E79218965EB72C92A549DD5A330112",
-    "name": "租户",
-    "type": 10
-  },
-  {
-    "id": 162605614280773,
-    "userName": "user",
-    "password": "96E79218965EB72C92A549DD5A330112",
-    "name": "员工",
-    "mobile": "13155556666",
-    "mainOrgId": 189097750675525,
-    "type": 1
+    "type": 100
   }
 ]

+ 1 - 18
src/hosts/ZhonTai.Host/InitData/Admin/ad_user.tenant.json

@@ -5,26 +5,9 @@
     "userName": "admin",
     "password": "96E79218965EB72C92A549DD5A330112",
     "name": "管理员",
+    "nickName": "小雪",
     "mobile": "13122223333",
     "mainOrgId": 189097691009093,
     "type": 100
-  },
-  {
-    "id": 162083448746053,
-    "tenantId": 162083448455237,
-    "userName": "18988889999",
-    "password": "96E79218965EB72C92A549DD5A330112",
-    "name": "租户",
-    "type": 10
-  },
-  {
-    "id": 162605614280773,
-    "tenantId": 161223412138053,
-    "userName": "user",
-    "password": "96E79218965EB72C92A549DD5A330112",
-    "name": "员工",
-    "mobile": "13155556666",
-    "mainOrgId": 189097750675525,
-    "type": 1
   }
 ]

+ 0 - 5
src/hosts/ZhonTai.Host/InitData/Admin/ad_user_org.json

@@ -3,10 +3,5 @@
     "id": 336652181319749,
     "userId": 161223411986501,
     "orgId": 189097691009093
-  },
-  {
-    "id": 336652219781190,
-    "userId": 162605614280773,
-    "orgId": 189097750675525
   }
 ]

+ 0 - 10
src/hosts/ZhonTai.Host/InitData/Admin/ad_user_role.json

@@ -3,15 +3,5 @@
     "id": 336652180803653,
     "userId": 161223411986501,
     "roleId": 161223412080709
-  },
-  {
-    "id": 162083448827973,
-    "userId": 162083448746053,
-    "roleId": 162083448594501
-  },
-  {
-    "id": 336652219396166,
-    "userId": 162605614280773,
-    "roleId": 162605510979653
   }
 ]

+ 1 - 1
src/platform/ZhonTai.Admin/Core/Attributes/TransactionAttribute.cs

@@ -24,6 +24,6 @@ public class TransactionAttribute : Attribute
     /// <summary>
     /// 数据库键
     /// </summary>
-    public string DbKey { get; set; } = DbKeys.AdminDbKey;
+    public string DbKey { get; set; } = DbKeys.MasterDbKey;
 
 }

+ 2 - 2
src/platform/ZhonTai.Admin/Core/Auth/ClaimAttributes.cs

@@ -41,7 +41,7 @@ public static class ClaimAttributes
     public const string TenantType = "tt";
 
     /// <summary>
-    /// 数据隔离
+    /// 数据库注册键
     /// </summary>
-    public const string DataIsolationType = "dit";
+    public const string DbKey = "dk";
 }

+ 2 - 2
src/platform/ZhonTai.Admin/Core/Auth/IUser.cs

@@ -55,7 +55,7 @@ public interface IUser
     TenantType? TenantType { get; }
 
     /// <summary>
-    /// 数据隔离类型
+    /// 数据库注册键
     /// </summary>
-    DataIsolationType? DataIsolationType { get; }
+    string DbKey { get; }
 }

+ 7 - 6
src/platform/ZhonTai.Admin/Core/Auth/User.cs

@@ -3,6 +3,7 @@ using System;
 using ZhonTai.Common.Extensions;
 using ZhonTai.Admin.Core.Entities;
 using ZhonTai.Admin.Domain.User;
+using System.Xml.Linq;
 
 namespace ZhonTai.Admin.Core.Auth;
 
@@ -153,18 +154,18 @@ public class User : IUser
     }
 
     /// <summary>
-    /// 数据隔离类型
+    /// 数据库注册键
     /// </summary>
-    public virtual DataIsolationType? DataIsolationType
+    public virtual string DbKey
     {
         get
         {
-            var dataIsolationType = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.DataIsolationType);
-            if (dataIsolationType != null && dataIsolationType.Value.NotNull())
+            var dbKey = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.DbKey);
+            if (dbKey != null && dbKey.Value.NotNull())
             {
-                return (DataIsolationType)Enum.Parse(typeof(DataIsolationType), dataIsolationType.Value, true);
+                return dbKey.Value;
             }
-            return null;
+            return "";
         }
     }
 }

+ 5 - 5
src/platform/ZhonTai.Admin/Core/Consts/DbKeys.cs

@@ -8,10 +8,10 @@ namespace ZhonTai.Admin.Core.Consts;
 public static partial class DbKeys
 {
     /// <summary>
-    /// admin
+    /// 
     /// </summary>
-    [Description("admin库")]
-    public const string AdminDbKey = "admindb";
+    [Description("库")]
+    public const string MasterDbKey = "masterdb";
 
     /// <summary>
     /// 多库
@@ -20,8 +20,8 @@ public static partial class DbKeys
     public const string MultiDbKey = "multidb_";
 
     /// <summary>
-    /// 租户独立数据库
+    /// 租户数据库
     /// </summary>
-    [Description("租户独立数据库")]
+    [Description("租户数据库")]
     public const string TenantDbKey = "tenantdb_";
 }

+ 5 - 6
src/platform/ZhonTai.Admin/Core/Db/DBServiceCollectionExtensions.cs

@@ -11,9 +11,6 @@ using ZhonTai.Admin.Core.Auth;
 using ZhonTai.Admin.Core.Startup;
 using ZhonTai.Admin.Core.Consts;
 using System.Linq;
-using MySqlX.XDevAPI;
-using static Org.BouncyCastle.Math.EC.ECCurve;
-using ZhonTai.Admin.Domain.User;
 
 namespace ZhonTai.Admin.Core.Db;
 
@@ -32,7 +29,8 @@ public static class DBServiceCollectionExtensions
         var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", env.EnvironmentName);
         var appConfig = ConfigHelper.Get<AppConfig>("appconfig", env.EnvironmentName);
 
-        freeSqlCloud.Register(DbKeys.AdminDbKey, () =>
+        //注册主库
+        freeSqlCloud.Register(DbKeys.MasterDbKey, () =>
         {
             //创建数据库
             if (dbConfig.CreateDb)
@@ -42,8 +40,9 @@ public static class DBServiceCollectionExtensions
 
             #region FreeSql
 
+            var providerType = dbConfig.ProviderType.NotNull() ? Type.GetType(dbConfig.ProviderType) : null;
             var freeSqlBuilder = new FreeSqlBuilder()
-                    .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString, dbConfig.ProviderType.NotNull() ? Type.GetType(dbConfig.ProviderType) : null)
+                    .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString, providerType)
                     .UseAutoSyncStructure(false)
                     .UseLazyLoading(false)
                     .UseNoneCommandParameter(true);
@@ -148,7 +147,7 @@ public static class DBServiceCollectionExtensions
             return fsql;
         });
 
-        //导入多数据库
+        //注册多数据库
         if (dbConfig.Dbs?.Length > 0)
         {
             foreach (var db in dbConfig.Dbs)

+ 17 - 17
src/platform/ZhonTai.Admin/Core/Db/FreeSqlCloudExtesions.cs

@@ -106,23 +106,23 @@ public static class FreeSqlCloudExtesions
         var appConfig = serviceProvider.GetRequiredService<AppConfig>();
 
         var tenantId = user.TenantId;
-        if (appConfig.Tenant && user.DataIsolationType == DataIsolationType.OwnDb && tenantId.HasValue)
+        if (appConfig.Tenant && tenantId.HasValue)
         {
-            var tenantName = DbKeys.TenantDbKey + tenantId;
-            var exists = cloud.ExistsRegister(tenantName);
+            var dbKey = user.DbKey.NotNull() ? user.DbKey : (DbKeys.TenantDbKey + tenantId);
+            var exists = cloud.ExistsRegister(dbKey);
             if (!exists)
             {
                 var dbConfig = serviceProvider.GetRequiredService<DbConfig>();
-                var uowm = serviceProvider.GetRequiredService<UnitOfWorkManagerCloud>();
-                var tenant = uowm.GetUnitOfWorkManager(DbKeys.AdminDbKey).Orm.GetRepositoryBase<TenantEntity>().Select.DisableGlobalFilter("Tenant").WhereDynamic(tenantId).ToOne<CreateFreeSqlTenantDto>();
-                cloud.Register(tenantName, () => CreateFreeSql(user, appConfig, dbConfig, tenant));
+                var tenantRepository = serviceProvider.GetRequiredService<ITenantRepository>();
+                var tenant = tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(tenantId).ToOne<CreateFreeSqlTenantDto>();
+                cloud.Register(dbKey, () => CreateFreeSql(user, appConfig, dbConfig, tenant));
             }
 
-            return cloud.Use(tenantName);
+            return cloud.Use(dbKey);
         }
         else
         {
-            var masterDb = cloud.Use(DbKeys.AdminDbKey);
+            var masterDb = cloud.Use(DbKeys.MasterDbKey);
             return masterDb;
         }
     }
@@ -141,19 +141,19 @@ public static class FreeSqlCloudExtesions
             return null;
         }
 
-        var user = serviceProvider.GetRequiredService<IUser>();
-        var appConfig = serviceProvider.GetRequiredService<AppConfig>();
-        var tenantName = DbKeys.TenantDbKey + tenantId;
-        var exists = cloud.ExistsRegister(tenantName);
+        var tenantRepository = serviceProvider.GetRequiredService<ITenantRepository>();
+        var tenant = tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(tenantId).ToOne<CreateFreeSqlTenantDto>();
+        var dbKey = tenant.DbKey.NotNull() ? tenant.DbKey : (DbKeys.TenantDbKey + tenantId);
+        var exists = cloud.ExistsRegister(dbKey);
+        
         if (!exists)
         {
+            var user = serviceProvider.GetRequiredService<IUser>();
             var dbConfig = serviceProvider.GetRequiredService<DbConfig>();
-            var uowm = serviceProvider.GetRequiredService<UnitOfWorkManagerCloud>();
-            var tenant = uowm.GetUnitOfWorkManager(DbKeys.AdminDbKey).Orm.GetRepositoryBase<TenantEntity>().Select.DisableGlobalFilter("Tenant").WhereDynamic(tenantId).ToOne<CreateFreeSqlTenantDto>();
-            //var timeSpan = tenant.IdleTime.HasValue && tenant.IdleTime.Value > 0 ? TimeSpan.FromMinutes(tenant.IdleTime.Value) : TimeSpan.MaxValue;
-            cloud.Register(tenantName, () => CreateFreeSql(user, appConfig, dbConfig, tenant));
+            var appConfig = serviceProvider.GetRequiredService<AppConfig>();
+            cloud.Register(dbKey, () => CreateFreeSql(user, appConfig, dbConfig, tenant));
         }
 
-        return cloud.Use(tenantName);
+        return cloud.Use(dbKey);
     }
 }

+ 3 - 4
src/platform/ZhonTai.Admin/Core/Db/Transaction/UnitOfWorkManagerCloud.cs

@@ -5,7 +5,6 @@ using System.Data;
 using ZhonTai.Admin.Core.Auth;
 using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Core.Consts;
-using ZhonTai.Admin.Core.Entities;
 
 namespace ZhonTai.Admin.Core.Db.Transaction;
 
@@ -32,14 +31,14 @@ public class UnitOfWorkManagerCloud
     {
         if (dbKey.IsNull())
         {
-            if (_appConfig.Tenant && _user.DataIsolationType == DataIsolationType.OwnDb && _user.TenantId.HasValue)
+            if (_appConfig.Tenant && _user.TenantId.HasValue)
             {
-                dbKey = DbKeys.TenantDbKey + _user.TenantId;
+                dbKey = _user.DbKey.NotNull() ? _user.DbKey : (DbKeys.TenantDbKey + _user.TenantId);
                 _cloud.GetCurrentDb(_serviceProvider);
             }
             else
             {
-                dbKey = DbKeys.AdminDbKey;
+                dbKey = DbKeys.MasterDbKey;
             }
         }
         if (_managers.TryGetValue(dbKey, out var uowm) == false)

+ 5 - 0
src/platform/ZhonTai.Admin/Core/Dto/CreateFreeSqlTenantDto.cs

@@ -4,6 +4,11 @@ namespace ZhonTai.Admin.Core.Dto;
 
 public class CreateFreeSqlTenantDto
 {
+    /// <summary>
+    /// 数据库注册键
+    /// </summary>
+    public string DbKey { get; set; }
+
     /// <summary>
     /// 数据库
     /// </summary>

+ 0 - 33
src/platform/ZhonTai.Admin/Core/Entities/DataIsolationType.cs

@@ -1,33 +0,0 @@
-using System.ComponentModel;
-
-namespace ZhonTai.Admin.Core.Entities;
-
-/// <summary>
-/// 数据隔离类型
-/// </summary>
-public enum DataIsolationType
-{
-    /// <summary>
-    /// 独立数据库
-    /// </summary>
-    [Description("独立数据库")]
-    OwnDb = 1,
-
-    /// <summary>
-    /// 独立数据表
-    /// </summary>
-    [Description("独立数据表")]
-    OwnDt = 2,
-
-    /// <summary>
-    /// 共享数据库,独立架构
-    /// </summary>
-    [Description("独立架构")]
-    Schema = 3,
-
-    /// <summary>
-    /// 共享数据库
-    /// </summary>
-    [Description("共享数据库")]
-    Share = 4
-}

+ 2 - 2
src/platform/ZhonTai.Admin/Core/HostApp.cs

@@ -173,13 +173,13 @@ public class HostApp
         var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", env.EnvironmentName);
         services.AddSingleton(dbConfig);
 
-        //添加admin数据库
+        //添加数据库
         var freeSqlCloud = new FreeSqlCloud(dbConfig.DistributeKey);
         services.AddSingleton<IFreeSql>(freeSqlCloud);
         services.AddSingleton(freeSqlCloud);
         services.AddScoped<UnitOfWorkManagerCloud>();
         services.AddAdminDb(freeSqlCloud, env, _hostAppOptions);
-        services.AddSingleton(provider => freeSqlCloud.Use(DbKeys.AdminDbKey));
+        services.AddSingleton(provider => freeSqlCloud.Use(DbKeys.MasterDbKey));
 
 
         //上传配置

+ 4 - 8
src/platform/ZhonTai.Admin/Domain/Tenant/TenantEntity.cs

@@ -58,14 +58,15 @@ public partial class TenantEntity : EntityFull
     public TenantType? TenantType { get; set; } = Core.Entities.TenantType.Tenant;
 
     /// <summary>
-    /// 数据隔离类型
+    /// 数据库注册键
     /// </summary>
-    public DataIsolationType DataIsolationType { get; set; } = DataIsolationType.Share;
+    [Column(StringLength = 50)]
+    public string DbKey { get; set; }
 
     /// <summary>
     /// 数据库
     /// </summary>
-    [Column(MapType = typeof(int))]
+    [Column(MapType = typeof(int?))]
     public DataType? DbType { get; set; }
 
     /// <summary>
@@ -74,11 +75,6 @@ public partial class TenantEntity : EntityFull
     [Column(StringLength = 500)]
     public string ConnectionString { get; set; }
 
-    /// <summary>
-    /// 空闲时间(分)
-    /// </summary>
-    public int? IdleTime { get; set; } = 10;
-
     /// <summary>
     /// 启用
     /// </summary>

+ 4 - 8
src/platform/ZhonTai.Admin/Services/Auth/AuthService.cs

@@ -87,7 +87,7 @@ public class AuthService : BaseService, IAuthService, IDynamicApi
             new Claim(ClaimAttributes.UserType, user.Type.ToInt().ToString(), ClaimValueTypes.Integer32),
             new Claim(ClaimAttributes.TenantId, user.TenantId.ToString(), ClaimValueTypes.Integer64),
             new Claim(ClaimAttributes.TenantType, user.TenantType.ToInt().ToString(), ClaimValueTypes.Integer32),
-            new Claim(ClaimAttributes.DataIsolationType, user.DataIsolationType.ToInt().ToString(), ClaimValueTypes.Integer32)
+            new Claim(ClaimAttributes.DbKey, user.DbKey??"")
         });
 
         return token;
@@ -135,7 +135,7 @@ public class AuthService : BaseService, IAuthService, IDynamicApi
         if (User.TenantAdmin)
         {
             var cloud = ServiceProvider.GetRequiredService<FreeSqlCloud>();
-            db = cloud.Use(DbKeys.AdminDbKey);
+            db = cloud.Use(DbKeys.MasterDbKey);
         }
        
         var permissionRepository = db.GetRepositoryBase<PermissionEntity>();
@@ -265,13 +265,9 @@ public class AuthService : BaseService, IAuthService, IDynamicApi
         var authLoginOutput = Mapper.Map<AuthLoginOutput>(user);
         if (_appConfig.Tenant)
         {
-            var tenant = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(user.TenantId).ToOneAsync(a => new
-            {
-                a.TenantType,
-                a.DataIsolationType
-            });
+            var tenant = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(user.TenantId).ToOneAsync(a => new { a.TenantType, a.DbKey });
             authLoginOutput.TenantType = tenant.TenantType;
-            authLoginOutput.DataIsolationType = tenant.DataIsolationType;
+            authLoginOutput.DbKey = tenant.DbKey;
         }
         string token = GetToken(authLoginOutput); 
         #endregion

+ 2 - 2
src/platform/ZhonTai.Admin/Services/Auth/Dto/AuthLoginOutput.cs

@@ -36,7 +36,7 @@ public class AuthLoginOutput
     public TenantType? TenantType { get; set; }
 
     /// <summary>
-    /// 数据隔离
+    /// 数据库注册键
     /// </summary>
-    public DataIsolationType? DataIsolationType { get; set; }
+    public string DbKey { get; set; }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs

@@ -445,7 +445,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
         if (_appConfig.Tenant && User.TenantType == TenantType.Tenant)
         {
             var cloud = ServiceProvider.GetRequiredService<FreeSqlCloud>();
-            var tenantPermissionIds = await cloud.Use(DbKeys.AdminDbKey).Select<TenantPermissionEntity>().Where(d => d.TenantId == User.TenantId).ToListAsync(m => m.PermissionId);
+            var tenantPermissionIds = await cloud.Use(DbKeys.MasterDbKey).Select<TenantPermissionEntity>().Where(d => d.TenantId == User.TenantId).ToListAsync(m => m.PermissionId);
             insertPermissionIds = insertPermissionIds.Where(d => tenantPermissionIds.Contains(d));
         }
 

+ 2 - 8
src/platform/ZhonTai.Admin/Services/Tenant/Dto/TenantAddInput.cs

@@ -1,5 +1,4 @@
 using System.ComponentModel.DataAnnotations;
-using ZhonTai.Admin.Core.Entities;
 
 namespace ZhonTai.Admin.Services.Tenant.Dto;
 
@@ -38,9 +37,9 @@ public class TenantAddInput
     public string Email { get; set; }
 
     /// <summary>
-    /// 数据隔离类型
+    /// 数据库注册键
     /// </summary>
-    public DataIsolationType DataIsolationType { get; set; }
+    public string DbKey { get; set; }
 
     /// <summary>
     /// 数据库
@@ -52,11 +51,6 @@ public class TenantAddInput
     /// </summary>
     public string ConnectionString { get; set; }
 
-    /// <summary>
-    /// 空闲时间(分)
-    /// </summary>
-    public int? IdleTime { get; set; }
-
     /// <summary>
     /// 启用
     /// </summary>

+ 1 - 31
src/platform/ZhonTai.Admin/Services/Tenant/Dto/TenantListOutput.cs

@@ -11,16 +11,6 @@ public class TenantListOutput
     /// </summary>
     public long Id { get; set; }
 
-    /// <summary>
-    /// 授权用户
-    /// </summary>
-    public long? UserId { get; set; }
-
-    /// <summary>
-    /// 授权角色
-    /// </summary>
-    public long? RoleId { get; set; }
-
     /// <summary>
     /// 企业编码
     /// </summary>
@@ -46,16 +36,6 @@ public class TenantListOutput
     /// </summary>
     public string Email { get; set; }
 
-    /// <summary>
-    /// 数据隔离类型
-    /// </summary>
-    public DataIsolationType DataIsolationType { get; set; }
-
-    /// <summary>
-    /// 数据隔离类型名称
-    /// </summary>
-    public string DataIsolationTypeName => DataIsolationType.ToDescriptionOrString();
-
     /// <summary>
     /// 数据库
     /// </summary>
@@ -65,17 +45,7 @@ public class TenantListOutput
     /// <summary>
     /// 数据库名称
     /// </summary>
-    public string DbTypeName => DbType.ToDescriptionOrString();
-
-    /// <summary>
-    /// 连接字符串
-    /// </summary>
-    public string ConnectionString { get; set; }
-
-    /// <summary>
-    /// 空闲时间(分)
-    /// </summary>
-    public int? IdleTime { get; set; }
+    public string DbTypeName => DbType?.ToDescriptionOrString();
 
     /// <summary>
     /// 启用

+ 16 - 8
src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs

@@ -19,6 +19,10 @@ using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Domain.Staff;
 using ZhonTai.Admin.Domain;
+using FreeSql;
+using Microsoft.Extensions.DependencyInjection;
+using ZhonTai.Admin.Core.Db;
+using ZhonTai.Admin.Core.Db.Transaction;
 
 namespace ZhonTai.Admin.Services.Tenant;
 
@@ -33,7 +37,6 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     private readonly IUserRepository _userRepository;
     private readonly IRepositoryBase<UserRoleEntity> _userRoleRepository;
     private readonly IRepositoryBase<RolePermissionEntity> _rolePermissionRepository;
-    private IOrgRepository _orgRepository => LazyGetRequiredService<IOrgRepository>();
     private IStaffRepository _staffRepository => LazyGetRequiredService<IStaffRepository>();
     private IRepositoryBase<UserOrgEntity> _userOrgRepository => LazyGetRequiredService<IRepositoryBase<UserOrgEntity>>();
     private AppConfig _appConfig => LazyGetRequiredService<AppConfig>();
@@ -114,6 +117,10 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
         TenantEntity tenant = await _tenantRepository.InsertAsync(entity);
         long tenantId = tenant.Id;
 
+        
+        var cloud = LazyGetRequiredService<FreeSqlCloud>();
+        var tenantDb = cloud.GetTenantDb(ServiceProvider, tenantId);
+
         //添加部门
         var org = new OrgEntity
         {
@@ -123,7 +130,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             ParentId = 0,
             MemberCount = 1
         };
-        await _orgRepository.InsertAsync(org);
+        await tenantDb.GetRepositoryBase<OrgEntity>().InsertAsync(org);
 
         //添加主管理员
         string pwd = MD5Encrypt.Encrypt32(_appConfig.DefaultPassword);
@@ -139,7 +146,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             Type = UserType.TenantAdmin,
             MainOrgId = org.Id
         };
-        await _userRepository.InsertAsync(user);
+        await tenantDb.GetRepositoryBase<UserEntity>().InsertAsync(user);
 
         long userId = user.Id;
 
@@ -149,7 +156,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             Id = userId,
             TenantId = tenantId
         };
-        await _staffRepository.InsertAsync(emp);
+        await tenantDb.GetRepositoryBase<StaffEntity>().InsertAsync(emp);
 
         //添加用户部门
         var userOrg = new UserOrgEntity
@@ -157,8 +164,9 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             UserId = userId,
             OrgId = org.Id
         };
-        await _userOrgRepository.InsertAsync(userOrg);
+        await tenantDb.GetRepositoryBase<UserOrgEntity>().InsertAsync(userOrg);
 
+        var roleRepository = tenantDb.GetRepositoryBase<RoleEntity>();
         //添加角色分组
         var roleGroup = new RoleEntity
         {
@@ -166,7 +174,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             Name = "系统默认",
             ParentId = 0
         };
-        await _roleRepository.InsertAsync(roleGroup);
+        await roleRepository.InsertAsync(roleGroup);
 
         //添加角色
         var role = new RoleEntity
@@ -176,7 +184,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             Code = "main-admin",
             ParentId = roleGroup.Id
         };
-        await _roleRepository.InsertAsync(role);
+        await roleRepository.InsertAsync(role);
 
         //添加用户角色
         var userRole = new UserRoleEntity()
@@ -184,7 +192,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             UserId = userId,
             RoleId = role.Id
         };
-        await _userRoleRepository.InsertAsync(userRole);
+        await tenantDb.GetRepositoryBase<UserRoleEntity>().InsertAsync(userRole);
 
         //更新租户的用户
         tenant.UserId = userId;

+ 5 - 13
src/platform/ZhonTai.Admin/Services/User/UserService.cs

@@ -28,6 +28,7 @@ using ZhonTai.Admin.Domain.Org;
 using System.Data;
 using ZhonTai.Admin.Domain.TenantPermission;
 using FreeSql;
+using ZhonTai.Admin.Core.Auth;
 
 namespace ZhonTai.Admin.Services.User;
 
@@ -122,18 +123,9 @@ public class UserService : BaseService, IUserService, IDynamicApi
         var entityDto = await _userRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(id).ToOneAsync<AuthLoginOutput>();
         if (_appConfig.Tenant && entityDto?.TenantId.Value > 0)
         {
-            var tenant = await _tenantRepository.Select.DisableGlobalFilter("Tenant")
-                .WhereDynamic(entityDto.TenantId)
-                .ToOneAsync(a => new 
-                { 
-                    a.TenantType, 
-                    a.DataIsolationType 
-                });
-            if (null != tenant)
-            {
-                entityDto.TenantType = tenant.TenantType;
-                entityDto.DataIsolationType = tenant.DataIsolationType;
-            }
+            var tenant = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(entityDto.TenantId).ToOneAsync(a => new { a.TenantType, a.DbKey });
+            entityDto.TenantType = tenant.TenantType;
+            entityDto.DbKey = tenant.DbKey;
         }
         return output.Ok(entityDto);
     }
@@ -165,7 +157,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
             if (User.TenantAdmin)
             {
                 var cloud = LazyGetRequiredService<FreeSqlCloud>();
-                var db = cloud.Use(DbKeys.AdminDbKey);
+                var db = cloud.Use(DbKeys.MasterDbKey);
 
                 return await db.Select<ApiEntity>()
                 .Where(a => db.Select<TenantPermissionEntity, PermissionApiEntity>()

+ 20 - 80
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -94,9 +94,9 @@
             租户类型
             </summary>
         </member>
-        <member name="F:ZhonTai.Admin.Core.Auth.ClaimAttributes.DataIsolationType">
+        <member name="F:ZhonTai.Admin.Core.Auth.ClaimAttributes.DbKey">
             <summary>
-            数据隔离
+            数据库注册键
             </summary>
         </member>
         <member name="T:ZhonTai.Admin.Core.Auth.IPermissionHandler">
@@ -162,9 +162,9 @@
             租户类型
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Core.Auth.IUser.DataIsolationType">
+        <member name="P:ZhonTai.Admin.Core.Auth.IUser.DbKey">
             <summary>
-            数据隔离类型
+            数据库注册键
             </summary>
         </member>
         <member name="T:ZhonTai.Admin.Core.Auth.PermissionHandler">
@@ -235,9 +235,9 @@
             租户类型
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Core.Auth.User.DataIsolationType">
+        <member name="P:ZhonTai.Admin.Core.Auth.User.DbKey">
             <summary>
-            数据隔离类型
+            数据库注册键
             </summary>
         </member>
         <member name="T:ZhonTai.Admin.Core.BaseController">
@@ -700,9 +700,9 @@
             数据库键名
             </summary>
         </member>
-        <member name="F:ZhonTai.Admin.Core.Consts.DbKeys.AdminDbKey">
+        <member name="F:ZhonTai.Admin.Core.Consts.DbKeys.MasterDbKey">
             <summary>
-            admin
+            
             </summary>
         </member>
         <member name="F:ZhonTai.Admin.Core.Consts.DbKeys.MultiDbKey">
@@ -712,7 +712,7 @@
         </member>
         <member name="F:ZhonTai.Admin.Core.Consts.DbKeys.TenantDbKey">
             <summary>
-            租户独立数据库
+            租户数据库
             </summary>
         </member>
         <member name="T:ZhonTai.Admin.Core.Conventions.ApiGroupConvention">
@@ -887,6 +887,11 @@
             <typeparam name="TResult"></typeparam>
             <param name="invocation"></param>
         </member>
+        <member name="P:ZhonTai.Admin.Core.Dto.CreateFreeSqlTenantDto.DbKey">
+            <summary>
+            数据库注册键
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Core.Dto.CreateFreeSqlTenantDto.DbType">
             <summary>
             数据库
@@ -1067,31 +1072,6 @@
             <param name="success"></param>
             <returns></returns>
         </member>
-        <member name="T:ZhonTai.Admin.Core.Entities.DataIsolationType">
-            <summary>
-            数据隔离类型
-            </summary>
-        </member>
-        <member name="F:ZhonTai.Admin.Core.Entities.DataIsolationType.OwnDb">
-            <summary>
-            独立数据库
-            </summary>
-        </member>
-        <member name="F:ZhonTai.Admin.Core.Entities.DataIsolationType.OwnDt">
-            <summary>
-            独立数据表
-            </summary>
-        </member>
-        <member name="F:ZhonTai.Admin.Core.Entities.DataIsolationType.Schema">
-            <summary>
-            共享数据库,独立架构
-            </summary>
-        </member>
-        <member name="F:ZhonTai.Admin.Core.Entities.DataIsolationType.Share">
-            <summary>
-            共享数据库
-            </summary>
-        </member>
         <member name="P:ZhonTai.Admin.Core.Entities.IEntity`1.Id">
             <summary>
             主键Id
@@ -2444,9 +2424,9 @@
             租户类型
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.Tenant.TenantEntity.DataIsolationType">
+        <member name="P:ZhonTai.Admin.Domain.Tenant.TenantEntity.DbKey">
             <summary>
-            数据隔离类型
+            数据库注册键
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Domain.Tenant.TenantEntity.DbType">
@@ -2459,11 +2439,6 @@
             连接字符串
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.Tenant.TenantEntity.IdleTime">
-            <summary>
-            空闲时间(分)
-            </summary>
-        </member>
         <member name="P:ZhonTai.Admin.Domain.Tenant.TenantEntity.Enabled">
             <summary>
             启用
@@ -3058,9 +3033,9 @@
             租户类型
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Auth.Dto.AuthLoginOutput.DataIsolationType">
+        <member name="P:ZhonTai.Admin.Services.Auth.Dto.AuthLoginOutput.DbKey">
             <summary>
-            数据隔离
+            数据库注册键
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Services.Auth.Dto.AuthUserMenuDto.Id">
@@ -5070,9 +5045,9 @@
             邮箱地址
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantAddInput.DataIsolationType">
+        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantAddInput.DbKey">
             <summary>
-            数据隔离类型
+            数据库注册键
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantAddInput.DbType">
@@ -5085,11 +5060,6 @@
             连接字符串
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantAddInput.IdleTime">
-            <summary>
-            空闲时间(分)
-            </summary>
-        </member>
         <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantAddInput.Enabled">
             <summary>
             启用
@@ -5105,16 +5075,6 @@
             主键
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.UserId">
-            <summary>
-            授权用户
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.RoleId">
-            <summary>
-            授权角色
-            </summary>
-        </member>
         <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.Code">
             <summary>
             企业编码
@@ -5140,16 +5100,6 @@
             邮箱地址
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.DataIsolationType">
-            <summary>
-            数据隔离类型
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.DataIsolationTypeName">
-            <summary>
-            数据隔离类型名称
-            </summary>
-        </member>
         <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.DbType">
             <summary>
             数据库
@@ -5160,16 +5110,6 @@
             数据库名称
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.ConnectionString">
-            <summary>
-            连接字符串
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.IdleTime">
-            <summary>
-            空闲时间(分)
-            </summary>
-        </member>
         <member name="P:ZhonTai.Admin.Services.Tenant.Dto.TenantListOutput.Enabled">
             <summary>
             启用