ABP(現代ASP.NET樣板開發框架)系列之七、ABP Session管理

點這裏進入ABP系列文章總目錄html

 

基於DDD的現代ASP.NET開發框架--ABP系列之七、ABP Session管理
git

 

ABP是「ASP.NET Boilerplate Project (ASP.NET樣板項目)」的簡稱。github

ABP的官方網站http://www.aspnetboilerplate.com架構

ABP在Github上的開源項目https://github.com/aspnetboilerplate框架

 


 

簡介

若是一個應用程序須要登陸,則它必須知道當前用戶執行了什麼操做。所以ASP.NET在展現層提供了一套本身的SESSION會話對象,而ABP則提供了一個能夠在任何地方
獲取當前用戶和租戶的IAbpSession接口。ide

 

關於IAbpSession網站

須要獲取會話信息則必須實現IAbpSession接口。雖然你能夠用本身的方式去實現它(IAbpSession),可是它在module-zero項目中已經有了完整的實現。spa

 

注入Session

IAbpSession一般是以屬性注入的方式存在於須要它的類中,不須要獲取會話信息的類中則不須要它。若是咱們使用屬性注入方式,咱們能夠用
NullAbpSession.Instance做爲默認值來初始化它(IAbpSession),以下所示:架構設計

public class MyClass : ITransientDependency
{
    public IAbpSession AbpSession { get; set; }

    public MyClass()
    {
        AbpSession = NullAbpSession.Instance;
    }

    public void MyMethod()
    {
        var currentUserId = AbpSession.UserId;
        //...
    }
}

因爲受權是應用層的任務,所以咱們應該在應用層和應用層的上一層使用IAbpSession(咱們不在領域層使用IAbpSession是很正常的)。設計

ApplicationService, AbpControllerAbpApiController 這3個基類已經注入了AbpSession屬性,所以在Application Service的實例方法中,能直接使用AbpSession屬性。

 

使用Session屬性

AbpSession定義的一些關鍵屬性:

  • UserId: 當前用戶的標識ID,若是沒有當前用戶則爲null.若是須要受權訪問則它不可能爲空。
  • TenantId: 當前租戶的標識ID,若是沒有當前租戶則爲null。
  • MultiTenancySide: 多是Host或Tenant。

UserId和TenantId是能夠爲null的。固然也提供了不爲空時獲取數據的 GetUserId()和GetTenantId() 方法 。當你肯定有當前用戶時,你可使用GetUserId()方法。
若是當前用戶爲空,使用該方法則會拋出一個異常。GetTenantId()的使用方式和GetUserId()相似。

 

 


 
陽銘注:

ABP框架中的AbpSession, 並無使用到System.Web.HttpSessionStateBase, 而是本身定義了一個Abp.Runtime.Session.IAbpSession接口, 並在Zero模塊中經過AspNet.Identity組件實現了AbpSession對象的存值、取值。 因此即便Web服務重啓,也不會丟失Session狀態。

在我本身的項目中, Session對象只有UserId、TenantId、MultiTenancySide這幾個屬性是不夠用的,我擴充了幾個屬性和方法,使用起來很是方便。有這個需求的朋友,歡迎加入QQ羣與我交流。

 


 

但願更多國內的架構師能關注到ABP這個項目,也許這其中有能幫助到您的地方,也許有您的參與,這個項目能夠發展得更好。

歡迎加ABP架構設計交流QQ羣:134710707

ABP架構設計交流羣

 

點這裏進入ABP系列文章總目錄

相關文章
相關標籤/搜索