程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> <<ABP框架>> 會話,abp框架會話

<<ABP框架>> 會話,abp框架會話

編輯:關於.NET

<<ABP框架>> 會話,abp框架會話


文檔目錄

 

本節內容:

  • 簡介
    • 關於 IAbpSeesion
  • 注入會話
  • 會話屬性
  • 用戶標識符

 

簡介

如果一個應用需要登錄,它就需要知道當前用戶在執行的操作。盡管Asp.net自身在展現層提供了Session(會話)對象,而ABP提供IAbpSession接口來獲取當前用戶和租戶,而不用Asp.net的Session。

關於 IAbpSession

必須實現IAbpSession接口,以便獲取真實的會話信息。盡管你可以用自己的方式實現它,但在module-zero項目裡已經完全地實現了。

IAbp同樣也是完成集成的,它可用在ABPr其它結構裡(設置系統和授權系統)。

 

注入會話

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屬性。

 

會話屬性

AbpSession定義了幾個關鍵屬性:

  • UserId:當前用戶的Id或空(如果沒有當前用戶),如果調用需要授權的代碼,它就不能為空。
  • TenantId:當前租戶的Id或空(如果沒有當前租戶:尚未登錄或是個宿主用戶)。
  • ImpersonatorUserId:模擬用戶的Id(如果其它用戶模擬當前會話),如果不是模擬登錄就為空。
  • ImpersonatorTenantId:模擬用戶的租戶的Id(如果其它用戶模擬當前會話),如果不是模擬登錄就為空。
  • MultiTenancySide:可能是宿主或租戶。

UserId和TenantId都可為空,有不可為空的方法GetUserId和GetTenantId,如果你能確保有當前用戶,你可以調用GetUserId()。如果當前用戶為空,這個方法拋出異常,GetTenantId()雷同。

Impersonator(模擬)屬性與其它屬性不能共同使用,一般只為了審核日志的目的才用它。

 

用戶標識符

你可用.ToUserIdentifier()擴展方法,從IAbpSession創建一個UserIdentifier對象。由於UserIdentifier用在眾多的API裡,所以這將簡化為當前用戶創建一個UserIdentifier。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved