diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs index 3f6df9b6fe..e283277b29 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs @@ -1,10 +1,16 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.Abp.TenantManagement { public interface ITenantAppService : IAsyncCrudAppService { - //TODO: Manage connection strings + Task GetDefaultConnectionStringAsync(Guid id); + + Task SetDefaultConnectionStringAsync(Guid id, string defaultConnectionString); + + Task RemoveDefaultConnectionStringAsync(Guid id); + } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs index c8b7c93311..961df4dcb7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs @@ -79,5 +79,23 @@ namespace Volo.Abp.TenantManagement await TenantRepository.DeleteAsync(tenant); } + + public async Task GetDefaultConnectionStringAsync(Guid id) + { + var tenant = await TenantRepository.GetAsync(id); + return tenant?.FindDefaultConnectionString(); + } + + public async Task SetDefaultConnectionStringAsync(Guid id, string defaultConnectionString) + { + var tenant = await TenantRepository.GetAsync(id); + tenant.SetDefaultConnectionString(defaultConnectionString); + } + + public async Task RemoveDefaultConnectionStringAsync(Guid id) + { + var tenant = await TenantRepository.GetAsync(id); + tenant.RemoveDefaultConnectionString(); + } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs index 74b9a7ebc0..0f5a54171d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs @@ -32,6 +32,33 @@ namespace Volo.Abp.TenantManagement return FindConnectionString(Data.ConnectionStrings.DefaultConnectionStringName); } + public virtual void SetDefaultConnectionString(string defaultConnectionString) + { + var defaultConnectionStringName = + ConnectionStrings.FirstOrDefault(x => x.Name == Data.ConnectionStrings.DefaultConnectionStringName); + + if (defaultConnectionStringName != null) + { + defaultConnectionStringName.SetValue(defaultConnectionString); + } + else + { + ConnectionStrings.Add(new TenantConnectionString(Id, Data.ConnectionStrings.DefaultConnectionStringName, + defaultConnectionString)); + } + } + + public virtual void RemoveDefaultConnectionString() + { + var defaultConnectionStringName = + ConnectionStrings.FirstOrDefault(x => x.Name == Data.ConnectionStrings.DefaultConnectionStringName); + + if (defaultConnectionStringName != null) + { + ConnectionStrings.Remove(defaultConnectionStringName); + } + } + [CanBeNull] public virtual string FindConnectionString(string name) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs index 8d6b894fba..a01779e2d2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs @@ -42,5 +42,21 @@ namespace Volo.Abp.TenantManagement { return _service.DeleteAsync(id); } + + [HttpPost] + public Task GetDefaultConnectionStringAsync(Guid id) + { + return _service.GetDefaultConnectionStringAsync(id); + } + + public Task SetDefaultConnectionStringAsync(Guid id, string defaultConnectionString) + { + return _service.SetDefaultConnectionStringAsync(id, defaultConnectionString); + } + + public Task RemoveDefaultConnectionStringAsync(Guid id) + { + return _service.RemoveDefaultConnectionStringAsync(id); + } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json index c223908ffa..f38deeea89 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json @@ -6,6 +6,9 @@ "NewTenant": "New tenant", "TenantName": "Tenant name", "DisplayName:TenantName": "Tenant name", - "TenantDeletionConfirmationMessage": "Tenant '{0}' will be deleted. Do you confirm that?" + "TenantDeletionConfirmationMessage": "Tenant '{0}' will be deleted. Do you confirm that?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Default Connection String", + "DisplayName:UseSharedDatabase": "Use the Shared Database" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json index 44ea338604..5f310218a6 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json @@ -6,6 +6,9 @@ "NewTenant": "Novo Inquilino", "TenantName": "Inquilino", "DisplayName:TenantName": "Inquilino", - "TenantDeletionConfirmationMessage": "Inquilino '{0}' será excluído. Tem certeza?" + "TenantDeletionConfirmationMessage": "Inquilino '{0}' será excluído. Tem certeza?", + "ConnectionStrings": "Cordas de Conexão", + "DisplayName:DefaultConnectionString": "String de Conexão Padrão", + "DisplayName:UseSharedDatabase": "Use o banco de dados compartilhado" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/tr.json index 5656ad0c03..98eb9b0547 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/tr.json @@ -6,6 +6,9 @@ "NewTenant": "Yeni müşteri", "TenantName": "Müşteri adı", "DisplayName:TenantName": "Müşteri adı", - "TenantDeletionConfirmationMessage": "'{0}' isimli müşteri silinecektir. Onaylıyor musunuz?" + "TenantDeletionConfirmationMessage": "'{0}' isimli müşteri silinecektir. Onaylıyor musunuz?", + "ConnectionStrings": "Bağlantı dizeleri", + "DisplayName:DefaultConnectionString": "Varsayılan Bağlantı Dize", + "DisplayName:UseSharedDatabase": "Paylaşılan Veritabanını kullanın" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/zh-Hans.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/zh-Hans.json index d47cdf0233..da5951a7f4 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/zh-Hans.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/zh-Hans.json @@ -1,11 +1,14 @@ { - "culture": "zh-Hans", - "texts": { - "Menu:TenantManagement": "租户管理", - "Tenants": "租户", - "NewTenant": "新租户", - "TenantName": "租户名称", - "DisplayName:TenantName": "租户名称", - "TenantDeletionConfirmationMessage": "租户 '{0}' 将被删除. 你确定吗?" - } - } \ No newline at end of file + "culture": "zh-Hans", + "texts": { + "Menu:TenantManagement": "租户管理", + "Tenants": "租户", + "NewTenant": "新租户", + "TenantName": "租户名称", + "DisplayName:TenantName": "租户名称", + "TenantDeletionConfirmationMessage": "租户 '{0}' 将被删除. 你确定吗?", + "ConnectionStrings": "连接字符串", + "DisplayName:DefaultConnectionString": "默认连接字符串", + "DisplayName:UseSharedDatabase": "使用共享数据库" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml new file mode 100644 index 0000000000..fc1816fb34 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml @@ -0,0 +1,35 @@ +@page +@using Microsoft.Extensions.Localization +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@using Volo.Abp.TenantManagement.Localization +@using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants +@model ConnectionStringsModal +@inject IStringLocalizer L +@{ + Layout = null; +} +
+ + + + + + + +
+ +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs new file mode 100644 index 0000000000..ac2f98ca0f --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs @@ -0,0 +1,62 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; + +namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants +{ + public class ConnectionStringsModal : AbpPageModel + { + [BindProperty] + public TenantInfoModel Tenant { get; set; } + + private readonly ITenantAppService _tenantAppService; + + public ConnectionStringsModal(ITenantAppService tenantAppService) + { + _tenantAppService = tenantAppService; + } + + public async Task OnGetAsync(Guid id) + { + var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id); + Tenant = new TenantInfoModel() + { + Id = id, + DefaultConnectionString = defaultConnectionString, + UseSharedDatabase = defaultConnectionString.IsNullOrWhiteSpace() + }; + } + + public async Task OnPostAsync() + { + ValidateModel(); + + if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace()) + { + await _tenantAppService.RemoveDefaultConnectionStringAsync(Tenant.Id); + + } + else + { + await _tenantAppService.SetDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString); + } + + return NoContent(); + } + + public class TenantInfoModel + { + [HiddenInput] + public Guid Id { get; set; } + + [Display(Name = "DisplayName:UseSharedDatabase")] + public bool UseSharedDatabase { get; set; } + + [StringLength(TenantConnectionStringConsts.MaxNameLength)] + [Display(Name = "DisplayName:DefaultConnectionString")] + public string DefaultConnectionString { get; set; } + } + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js index 344cc1963d..e548c18aed 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js @@ -1,9 +1,10 @@ -(function () { +(function () { var l = abp.localization.getResource('AbpTenantManagement'); var _tenantAppService = volo.abp.tenantManagement.tenant; var _editModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/EditModal'); + var _connectionStringsModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal'); var _createModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/CreateModal'); var _featuresModal = new abp.ModalManager(abp.appPath + 'FeatureManagement/FeatureManagementModal'); @@ -28,6 +29,17 @@ }); } }, + { + text: l('ConnectionStrings'), + visible: function () { + return true; //TODO: Check permission + }, + action: function (data) { + _connectionStringsModal.open({ + id: data.record.id + }); + } + }, { text: l('Features'), visible: function () {