ABP理論學習之Abp Session


返回總目錄


本篇目錄

介紹###

當應用程序要求用戶登錄時,那么應用程序也需要知道當前用戶正在執行的操作。雖然ASP.NET本身在展現層提供了Session對象,但ABP也提供了在任何需要獲得當前用戶和租戶的地方都可以使用的IAbpSession接口。

關於IAbpSession

為了獲得實際的session信息,必須要實現IAbpSession接口。雖然你可以用自己的方式實現它,但在module-zero項目中已經完全實現。

IAbpSession已經完全集成到ABP(實例的設置系統和授權系統)中。

注入Session###

IAbpSession一般屬性注入到需要的類中,除非沒有Session信息導致IAbpSession不可能工作。如果我們使用了屬性注入,那么我們可以使用NullAbpSession.Instance作為默認值,如下所示:

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

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

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

因為授權是應用層的事兒,所以建議在應用層和更高的層使用IAbpSession(一般我們不再領域層使用)。ApplicationService,AbpController,AbpApiController已經注入了 AbpSession。因此,你可以直接在應用層服務方法中為實例使用AbpSession屬性。

使用Session屬性###

AbpSession定義了一些key屬性:

  • UserId:當前用戶的Id。值為null,表示當前的用戶不存在。如果調用的代碼授權給某個用戶的話,那么值不為null。
  • TenantId:當前租戶的Id。如果當前的租戶不存在,值就為null。
  • MultiTenancySide:可能是Host(租主)或者Tenant(租戶)。

UserId和TenantId是nullable(可空的),也存在不可空的GetUserId()GetTenantId()方法。如果你確定當前的用戶存在,那么你可以調用GetUserId()。如果當前的用戶為null,那么該方法就會拋異常。GetTanantId()也是類似的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM