本節目錄 介紹 關於IAbpSession session註入 使用session屬性 介紹 如果應用需要登錄,則需要知道當前用戶正在執行操作.在Asp.Net中,已經提供了Session對象在展現層.Abp提供IAbpSession 介面,在任何需要的地方來獲得當前用戶和租戶. 關於IAbpSes
本節目錄
- 介紹
- 關於IAbpSession
- session註入
- 使用session屬性
介紹
如果應用需要登錄,則需要知道當前用戶正在執行操作.在Asp.Net中,已經提供了Session對象在展現層.Abp提供IAbpSession 介面,在任何需要的地方來獲得當前用戶和租戶.
關於IAbpSession
IAbpSession 需要實現獲取真實的session信息.雖然你可以用自己的方式實現,在module-zero項目中已經完整的實現了.
IAbpSession 完全集成到Abp中.(設置系統和授權系統)
session註入
IAbpSession 在使用的類中,通常採用屬性註入.除非沒有session信息導致不能工作.如果我們使用屬性註入,我們可以使用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 and AbpApiController已經繼承了AbpSession.所以你可以在application service method使用AbpSession.
public class MyClass : ITransientDependency { public IAbpSession AbpSession { get; set; } public MyClass() { AbpSession = NullAbpSession.Instance; } public void MyMethod() { var currentUserId = AbpSession.UserId; //... } }
使用session 屬性
AbpSession定義了一些特性.
AbpSession defines a few key properties:
- UserId: Id of the current user or null if there is no current user. It can not be null if the calling code is authorized.
- UserId: 當前用戶的Id,為空,當前無用戶.
- TenantId: 當前租戶的Id,為空,當前無租戶.
- ImpersonatorUserId: 如果當前session模擬其他用戶.則為模擬用戶Id.如果沒有模擬登錄,則為null.
- ImpersonatorTenantId: 如果當前session模擬其他用戶,則為模擬用戶的租戶.如果沒有模擬登錄,則為null.
- MultiTenancySide: 要麼是Host要麼是Tenant
UserId and TenantId 可為空.GetUserId() and GetTenantId()方法返回值不為空.如果你確定當前用戶存在,你可以調用GetUserId().如果當前用戶不存在,調用會拋出異常.GetTenantId()同樣如此.
模擬屬性通常用於審計日誌的目的.