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:
delete from DemoObjects;truncate table DemoObjects;
  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設置發送郵箱:

發送郵箱設爲qq郵箱,端口爲587,SMTP服務器:smtp.qq.com,用戶名自己設置,密碼這裏不是qq郵箱登錄密碼而實開啓pop3服務的授權碼 ,保存設置

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

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

測試郵件:

創建租戶,並添加數據測試

先不設置租戶,以admin登錄系統,添加租戶tenant1,並設置郵箱,這是系統會發送激活郵件。先註銷系統,登錄郵箱,點擊驗證會獲取到租戶的用戶名和密碼。
在租戶tenant1下登錄系統,創建u1_t1的測試實體DemoObject,再在default租戶下登錄系統,創建u1_default的測試實體,再租戶爲空時,登錄系統,添加u1_null的測試實體。
這是會發現在三個子系統下,用戶的數據實現了隔離,互不影響,也看不到其他租戶的數據。這就是多租戶。

切換到無租戶的系統

在SIS.Core.Shared下的SISConsts下設置public const bool MultiTenancyEnabled = false;,可以將系統設置爲無租戶系統。
這是登錄時無租戶選擇,以admin登錄,這時測試實體顯示的時u1_default。說明系統在無租戶的情況下是以系統默認創建的default租戶系統運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章