Browse Source

Merge pull request #9353 from abpframework/maliming/MultiTenantConnectionStringResolver

Check IsUsedByTenants when use mapped database connection string.
pull/9371/head
Halil İbrahim Kalkan 5 years ago
committed by GitHub
parent
commit
08979d2f3f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs
  2. 24
      framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs

8
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs

@ -41,7 +41,7 @@ namespace Volo.Abp.MultiTenancy
} }
var tenantDefaultConnectionString = tenant.ConnectionStrings.Default; var tenantDefaultConnectionString = tenant.ConnectionStrings.Default;
//Requesting default connection string... //Requesting default connection string...
if (connectionStringName == null || if (connectionStringName == null ||
connectionStringName == ConnectionStrings.DefaultConnectionStringName) connectionStringName == ConnectionStrings.DefaultConnectionStringName)
@ -59,10 +59,10 @@ namespace Volo.Abp.MultiTenancy
//Found for the tenant //Found for the tenant
return connString; return connString;
} }
//Fallback to the mapped database for the specific connection string //Fallback to the mapped database for the specific connection string
var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName); var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName);
if (database != null) if (database != null && database.IsUsedByTenants)
{ {
connString = tenant.ConnectionStrings.GetOrDefault(database.DatabaseName); connString = tenant.ConnectionStrings.GetOrDefault(database.DatabaseName);
if (!connString.IsNullOrWhiteSpace()) if (!connString.IsNullOrWhiteSpace())
@ -166,4 +166,4 @@ namespace Volo.Abp.MultiTenancy
} }
} }
} }
} }

24
framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs

@ -30,6 +30,21 @@ namespace Volo.Abp.Data.MultiTenancy
{ {
options.ConnectionStrings.Default = "default-value"; options.ConnectionStrings.Default = "default-value";
options.ConnectionStrings["db1"] = "db1-default-value"; options.ConnectionStrings["db1"] = "db1-default-value";
options.ConnectionStrings["Saas"] = "Saas-default-value";
options.ConnectionStrings["Admin"] = "Admin-default-value";
options.Databases.Configure("Saas", database =>
{
database.MappedConnections.Add("Saas1");
database.MappedConnections.Add("Saas2");
database.IsUsedByTenants = false;
});
options.Databases.Configure("Admin", database =>
{
database.MappedConnections.Add("Admin1");
database.MappedConnections.Add("Admin2");
});
}); });
services.Configure<AbpDefaultTenantStoreOptions>(options => services.Configure<AbpDefaultTenantStoreOptions>(options =>
@ -41,7 +56,8 @@ namespace Volo.Abp.Data.MultiTenancy
ConnectionStrings = ConnectionStrings =
{ {
{ ConnectionStrings.DefaultConnectionStringName, "tenant1-default-value"}, { ConnectionStrings.DefaultConnectionStringName, "tenant1-default-value"},
{"db1", "tenant1-db1-value"} {"db1", "tenant1-db1-value"},
{"Admin", "tenant1-Admin-value"}
} }
}, },
new TenantConfiguration(_tenant2Id, "tenant2") new TenantConfiguration(_tenant2Id, "tenant2")
@ -55,12 +71,16 @@ namespace Volo.Abp.Data.MultiTenancy
//No tenant in current context //No tenant in current context
(await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); (await _connectionResolver.ResolveAsync()).ShouldBe("default-value");
(await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value");
(await _connectionResolver.ResolveAsync("Saas1")).ShouldBe("Saas-default-value");
(await _connectionResolver.ResolveAsync("Admin2")).ShouldBe("Admin-default-value");
//Overriden connection strings for tenant1 //Overriden connection strings for tenant1
using (_currentTenant.Change(_tenant1Id)) using (_currentTenant.Change(_tenant1Id))
{ {
(await _connectionResolver.ResolveAsync()).ShouldBe("tenant1-default-value"); (await _connectionResolver.ResolveAsync()).ShouldBe("tenant1-default-value");
(await _connectionResolver.ResolveAsync("db1")).ShouldBe("tenant1-db1-value"); (await _connectionResolver.ResolveAsync("db1")).ShouldBe("tenant1-db1-value");
(await _connectionResolver.ResolveAsync("Saas1")).ShouldBe("tenant1-default-value");
(await _connectionResolver.ResolveAsync("Admin2")).ShouldBe("tenant1-Admin-value");
} }
//No tenant in current context //No tenant in current context
@ -72,6 +92,8 @@ namespace Volo.Abp.Data.MultiTenancy
{ {
(await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); (await _connectionResolver.ResolveAsync()).ShouldBe("default-value");
(await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value");
(await _connectionResolver.ResolveAsync("Saas1")).ShouldBe("Saas-default-value");
(await _connectionResolver.ResolveAsync("Admin2")).ShouldBe("Admin-default-value");
} }
} }
} }

Loading…
Cancel
Save