天天看點

asp.net zero 8.2 學習-9-多租戶設定,發送郵件配置

學習在asp.net zero系統中如何切換多租戶及沒有租戶的設定:

  • 配置多租戶,為實體添加TenantID
  • 資料庫遷移
  • 修改DemoObjectAppService服務類的實體建立方法
  • 配置郵件發送
  • 建立租戶,并添加資料測試
  • 切換為無租戶系統

配置多租戶,為實體添加TenantID

asp.net zero系統預設采用多租戶設定,并且預設有一個default的租戶名稱。這裡需要對實體類(領域模型),添加TenantID,實作IMayHaveTenant接口

[Table("DemoObjects")]
public class DemoObject : FullAuditedEntity,IMayHaveTenant
{
    /// <summary>
    /// 租戶ID
    /// </summary>
    public int? TenantId { get; set; }
    ...
}
           

在SISDbContext下為DemoObject添加租戶ID為索引

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    //配置租戶ID
    modelBuilder.Entity<DemoObject>(b =>
    {
        b.HasIndex(e => new { e.TenantId });
    });
           

添加資料庫遷移

  1. 清空DemoObjects表,執行sql:
  1. 先添加資料庫遷移:

    add-migration addTenantId2DemoObject

  2. 再更新資料庫:

    update-database

修改DemoObjectAppService服務類的實體建立方法,添加租戶ID

/// <summary>
/// 建立實體
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[AbpAuthorize(AppPermissions.Pages_Demo_Create)]
private async Task Create(CreateOrEditDemoObjectDto input)
{
    var demoObject = ObjectMapper.Map<DemoObject>(input);
    //如果租戶ID不為空,則添加租戶ID
    if (AbpSession.TenantId!=null)
    {
        demoObject.TenantId = (int)AbpSession.TenantId;
    }
    await  _demoObjectRepository.InsertAsync(demoObject);
}
           

配置郵件發送

運作asp.net zero系統,在系統的設定->郵箱設定發送郵箱參數:這裡以qq郵箱作為發送郵箱,需要登入qq郵箱開啟POP3/SMTP服務:

開啟POP3/SMTP服務

asp.net zero 8.2 學習-9-多租戶設定,發送郵件配置

在asp.net zero設定發送郵箱:

發送郵箱設為qq郵箱,端口為587,SMTP伺服器:smtp.qq.com,使用者名自己設定,密碼這裡不是qq郵箱登入密碼而實開啟pop3服務的授權碼 ,儲存設定

asp.net zero 8.2 學習-9-多租戶設定,發送郵件配置

asp.net zero系統預設在調試模式下不發送郵件,需要到SIS.Core項目下的SISCoreModule.cs設定:注釋掉下面代碼,運作系統就可以在"系統->設定->郵箱"測試發送郵件功能

//預設Debug模式下不能發送郵件
//if (DebugHelper.IsDebug)
//{
//    //Disabling email sending in debug mode
//    Configuration.ReplaceService<IEmailSender, NullEmailSender>(DependencyLifeStyle.Transient);
//}
           

測試郵件:

asp.net zero 8.2 學習-9-多租戶設定,發送郵件配置

建立租戶,并添加資料測試

先不設定租戶,以admin登入系統,添加租戶tenant1,并設定郵箱,這是系統會發送激活郵件。先登出系統,登入郵箱,點選驗證會擷取到租戶的使用者名和密碼。

在租戶tenant1下登入系統,建立u1_t1的測試實體DemoObject,再在default租戶下登入系統,建立u1_default的測試實體,再租戶為空時,登入系統,添加u1_null的測試實體。

這是會發現在三個子系統下,使用者的資料實作了隔離,互不影響,也看不到其他租戶的資料。這就是多租戶。

asp.net zero 8.2 學習-9-多租戶設定,發送郵件配置

切換到無租戶的系統

在SIS.Core.Shared下的SISConsts下設定

public const bool MultiTenancyEnabled = false;

,可以将系統設定為無租戶系統。

這是登入時無租戶選擇,以admin登入,這時測試實體顯示的時u1_default。說明系統在無租戶的情況下是以系統預設建立的default租戶系統運作。