0
0
Pārlūkot izejas kodu

租户重新设计

zhontai 3 gadi atpakaļ
vecāks
revīzija
b839903e2d

+ 1 - 20
Admin.Core.Common/Configs/AppConfig.cs

@@ -1,24 +1,5 @@
 namespace Admin.Core.Common.Configs
 {
-    /// <summary>
-    /// 租户数据库类型
-    /// </summary>
-    public enum TenantDbType
-    {
-        /// <summary>
-        /// 无租户
-        /// </summary>
-        None,
-        /// <summary>
-        /// 共享数据库
-        /// </summary>
-        Share,
-        /// <summary>
-        /// 独立数据库
-        /// </summary>
-        Own
-    }
-
     /// <summary>
     /// 应用配置
     /// </summary>
@@ -37,7 +18,7 @@
         /// <summary>
         /// 租户类型
         /// </summary>
-        public TenantDbType TenantDbType { get; set; } = TenantDbType.None;
+        public bool Tenant { get; set; } = false;
 
         /// <summary>
         /// Swagger文档

+ 4 - 4
Admin.Core.Common/Extensions/EnumExtensions.cs

@@ -21,7 +21,7 @@ namespace Admin.Core.Common.Extensions
             return Convert.ToInt64(item);
         }
 
-        public static List<OptionOutput> ToList(this Enum value, bool ignoreUnKnown = false)
+        public static List<OptionOutput> ToList(this Enum value, bool ignoreNull = false)
         {
             var enumType = value.GetType();
 
@@ -29,14 +29,14 @@ namespace Admin.Core.Common.Extensions
                 return null;
 
             return Enum.GetValues(enumType).Cast<Enum>()
-                .Where(m => !ignoreUnKnown || !m.ToString().Equals("UnKnown")).Select(x => new OptionOutput
+                .Where(m => !ignoreNull || !m.ToString().Equals("Null")).Select(x => new OptionOutput
                 {
                     Label = x.ToDescription(),
                     Value = x
                 }).ToList();
         }
 
-        public static List<OptionOutput> ToList<T>(bool ignoreUnKnown = false)
+        public static List<OptionOutput> ToList<T>(bool ignoreNull = false)
         {
             var enumType = typeof(T);
 
@@ -44,7 +44,7 @@ namespace Admin.Core.Common.Extensions
                 return null;
 
             return Enum.GetValues(enumType).Cast<Enum>()
-                 .Where(m => !ignoreUnKnown || !m.ToString().Equals("UnKnown")).Select(x => new OptionOutput
+                 .Where(m => !ignoreNull || !m.ToString().Equals("Null")).Select(x => new OptionOutput
                  {
                      Label = x.ToDescription(),
                      Value = x

+ 26 - 0
Admin.Core.Model/Admin/TenantDbType.cs

@@ -0,0 +1,26 @@
+
+namespace Admin.Core.Model.Admin
+{
+    /// <summary>
+    /// 租户数据库类型
+    /// </summary>
+    public enum TenantDbType
+    {
+        /// <summary>
+        /// 独立数据库
+        /// </summary>
+        OwnDb,
+        /// <summary>
+        /// 独立数据表
+        /// </summary>
+        OwnDt,
+        /// <summary>
+        /// 共享数据库,独立架构
+        /// </summary>
+        Schema,
+        /// <summary>
+        /// 共享数据库
+        /// </summary>
+        Share
+    }
+}

+ 6 - 0
Admin.Core.Model/Admin/TenantEntity.cs

@@ -1,5 +1,6 @@
 using System;
 using Admin.Core.Common.BaseModel;
+using Admin.Core.Common.Configs;
 using FreeSql;
 using FreeSql.DataAnnotations;
 
@@ -68,6 +69,11 @@ namespace Admin.Core.Model.Admin
         /// </summary>
         public TenantType? TenantType { get; set; } = Common.BaseModel.TenantType.Tenant;
 
+        /// <summary>
+        /// 租户数据库类型
+        /// </summary>
+        public TenantDbType TenantDbType { get; set; } = TenantDbType.OwnDb;
+
         /// <summary>
         /// 数据库
         /// </summary>

+ 5 - 4
Admin.Core.Repository/Base/IdleBusExtesions.cs

@@ -8,10 +8,11 @@ namespace Admin.Core.Repository
         public static IFreeSql GetTenant(this IdleBus<IFreeSql> ib, long? tenantId, AppConfig appConfig)
         {
             var tenantName = AdminConsts.TenantName;
-            if (appConfig.TenantDbType == TenantDbType.Own)
-            {
-                tenantName = "tenant_" + tenantId?.ToString();
-            }
+            //需要查询租户数据库类型
+            //if (appConfig.TenantDbType == TenantDbType.Own)
+            //{
+            //    tenantName = "tenant_" + tenantId?.ToString();
+            //}
             var freeSql = ib.Get(tenantName);
             return freeSql;
         }

+ 5 - 4
Admin.Core.Service/Admin/Auth/AuthService.cs

@@ -105,10 +105,11 @@ namespace Admin.Core.Service.Admin.Auth
 
             var authLoginOutput = Mapper.Map<AuthLoginOutput>(user);
 
-            if(_appConfig.TenantDbType != TenantDbType.None)
-            {
-                authLoginOutput.TenantType = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(user.TenantId).ToOneAsync(a => a.TenantType);
-            }
+            ////需要查询租户数据库类型
+            //if(_appConfig.TenantDbType != TenantDbType.None)
+            //{
+            //    authLoginOutput.TenantType = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(user.TenantId).ToOneAsync(a => a.TenantType);
+            //}
 
             //登录清空用户缓存
             await _cache.DelAsync(string.Format(CacheKey.UserInfo, user.Id));

+ 8 - 7
Admin.Core.Service/Admin/Permission/PermissionService.cs

@@ -229,14 +229,15 @@ namespace Admin.Core.Service.Admin.Permission
 
         public async Task<IResponseOutput> GetPermissionList()
         {
+            ////需要查询租户数据库类型
             var permissions = await _permissionRepository.Select
-                .WhereIf(_appConfig.TenantDbType == TenantDbType.Share, a =>
-                    _permissionRepository.Orm.Select<RolePermissionEntity>()
-                    .InnerJoin<TenantEntity>((b, c) => b.RoleId == c.RoleId && c.Id == User.TenantId)
-                    .DisableGlobalFilter("Tenant")
-                    .Where(b => b.PermissionId == a.Id)
-                    .Any()
-                )
+                //.WhereIf(_appConfig.TenantDbType == TenantDbType.Share, a =>
+                //    _permissionRepository.Orm.Select<RolePermissionEntity>()
+                //    .InnerJoin<TenantEntity>((b, c) => b.RoleId == c.RoleId && c.Id == User.TenantId)
+                //    .DisableGlobalFilter("Tenant")
+                //    .Where(b => b.PermissionId == a.Id)
+                //    .Any()
+                //)
                 .OrderBy(a => a.ParentId)
                 .OrderBy(a => a.Sort)
                 .ToListAsync(a => new { a.Id, a.ParentId, a.Label, a.Type });

+ 7 - 0
Admin.Core.Service/Admin/Tenant/Input/TenantAddInput.cs

@@ -1,4 +1,6 @@
 
+using Admin.Core.Model.Admin;
+
 namespace Admin.Core.Service.Admin.Tenant.Input
 {
     /// <summary>
@@ -31,6 +33,11 @@ namespace Admin.Core.Service.Admin.Tenant.Input
         /// </summary>
         public string Email { get; set; }
 
+        /// <summary>
+        /// 租户数据库类型
+        /// </summary>
+        public TenantDbType TenantDbType { get; set; }
+
         /// <summary>
         /// 数据库
         /// </summary>

+ 1 - 21
Admin.Core/Admin.Core.Common.xml

@@ -445,26 +445,6 @@
             Redis缓存
             </summary>
         </member>
-        <member name="T:Admin.Core.Common.Configs.TenantDbType">
-            <summary>
-            租户数据库类型
-            </summary>
-        </member>
-        <member name="F:Admin.Core.Common.Configs.TenantDbType.None">
-            <summary>
-            无租户
-            </summary>
-        </member>
-        <member name="F:Admin.Core.Common.Configs.TenantDbType.Share">
-            <summary>
-            共享数据库
-            </summary>
-        </member>
-        <member name="F:Admin.Core.Common.Configs.TenantDbType.Own">
-            <summary>
-            独立数据库
-            </summary>
-        </member>
         <member name="T:Admin.Core.Common.Configs.AppConfig">
             <summary>
             应用配置
@@ -480,7 +460,7 @@
             跨域地址,默认 http://*:9000
             </summary>
         </member>
-        <member name="P:Admin.Core.Common.Configs.AppConfig.TenantDbType">
+        <member name="P:Admin.Core.Common.Configs.AppConfig.Tenant">
             <summary>
             租户类型
             </summary>

+ 30 - 0
Admin.Core/Admin.Core.Model.xml

@@ -454,6 +454,31 @@
             权限
             </summary>
         </member>
+        <member name="T:Admin.Core.Model.Admin.TenantDbType">
+            <summary>
+            租户数据库类型
+            </summary>
+        </member>
+        <member name="F:Admin.Core.Model.Admin.TenantDbType.OwnDb">
+            <summary>
+            独立数据库
+            </summary>
+        </member>
+        <member name="F:Admin.Core.Model.Admin.TenantDbType.OwnDt">
+            <summary>
+            独立数据表
+            </summary>
+        </member>
+        <member name="F:Admin.Core.Model.Admin.TenantDbType.Schema">
+            <summary>
+            共享数据库,独立架构
+            </summary>
+        </member>
+        <member name="F:Admin.Core.Model.Admin.TenantDbType.Share">
+            <summary>
+            共享数据库
+            </summary>
+        </member>
         <member name="T:Admin.Core.Model.Admin.TenantEntity">
             <summary>
             租户
@@ -504,6 +529,11 @@
             租户类型
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.TenantEntity.TenantDbType">
+            <summary>
+            租户数据库类型
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.TenantEntity.DbType">
             <summary>
             数据库

+ 3 - 3
Admin.Core/Db/DbHelper.cs

@@ -96,8 +96,8 @@ namespace Admin.Core.Db
         /// </summary>
         public static void ConfigEntity(IFreeSql db, AppConfig appConfig = null)
         {
-            //非共享数据库实体配置,不生成和操作租户Id
-            if (appConfig.TenantDbType != TenantDbType.Share)
+            //租户生成和操作租户Id
+            if (appConfig.Tenant)
             {
                 var iTenant = nameof(ITenant);
                 var tenantId = nameof(ITenant.TenantId);
@@ -394,7 +394,7 @@ namespace Admin.Core.Db
 
                 db.Aop.AuditValue += SyncDataAuditValue;
 
-                var fileName = appConfig.TenantDbType == TenantDbType.Share ? "data-share.json" : "data.json";
+                var fileName = appConfig.Tenant ? "data-share.json" : "data.json";
                 var filePath = Path.Combine(AppContext.BaseDirectory, $"Db/Data/{fileName}").ToPath();
                 var jsonData = FileHelper.ReadFile(filePath);
                 var data = JsonConvert.DeserializeObject<Data>(jsonData);

+ 10 - 8
Admin.Core/Db/TenantDBServiceCollectionExtensions.cs

@@ -40,10 +40,11 @@ namespace Admin.Core.Db
             IdleBus <IFreeSql> ib = new IdleBus<IFreeSql>(TimeSpan.FromMinutes(idleTime));
 
             var tenantName = AdminConsts.TenantName;
-            if(appConfig.TenantDbType == TenantDbType.Own)
-            {
-                tenantName = "tenant_" + user.TenantId?.ToString();
-            }
+            //需要查询租户数据库类型
+            //if (appConfig.TenantDbType == TenantDbType.Own)
+            //{
+            //    tenantName = "tenant_" + user.TenantId?.ToString();
+            //}
             ib.TryRegister(tenantName, () =>
             {
                 #region FreeSql
@@ -69,11 +70,12 @@ namespace Admin.Core.Db
                 //配置实体
                 DbHelper.ConfigEntity(fsql, appConfig);
 
+                ////需要查询租户数据库类型
                 //共享数据库
-                if (appConfig.TenantDbType == TenantDbType.Share)
-                {
-                    fsql.GlobalFilter.Apply<ITenant>("Tenant", a => a.TenantId == user.TenantId);
-                }
+                //if (appConfig.TenantDbType == TenantDbType.Share)
+                //{
+                //    fsql.GlobalFilter.Apply<ITenant>("Tenant", a => a.TenantId == user.TenantId);
+                //}
 
                 #region 监听Curd操作
                 if (dbConfig.Curd)

+ 2 - 2
Admin.Core/configs/appconfig.json

@@ -3,8 +3,8 @@
   "urls": [ "http://*:8000" ],
   //跨域地址
   "corUrls": [ "http://localhost:9000", "http://127.0.0.1:9000" ],
-  //租户数据库类型:None无租户, Share共享数据库, Own独立数据库
-  "tenantDbType": "Share",
+  //租户
+  "Tenant": false,
   //Swagger文档
   "swagger": false,
   //统一认证授权服务器