本篇目錄
介紹###
當應用程序要求用戶登錄時,那么應用程序也需要知道當前用戶正在執行的操作。雖然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()也是類似的。
