全部產品
Search
文件中心

:使用者存取控制

更新時間:Jul 06, 2024

基於屬性的存取控制

Hyperledger Fabric 支援使用基於屬性的存取控制(ABAC, Attribute-Based Access Control)來控制使用者的存取權限。在進行使用者的身份註冊時,登入認證(ECert)可以包含一個或多個屬性名稱和值,鏈碼運行時可以提取屬性值來進行存取控制決策。

例如,您正在開發一個名為 app1 的應用,只有 app1 的管理員才可以訪問一個特定的 chaincode 操作。您的 chaincode 可以根據調用者的認證中是否包含的 app1Admin 屬性以及該屬性值是否為 “true” 來決定是否允許訪問。

關於 Hyperledger Fabric ABAC 功能,更多請參見 Attribute-Based Access Control

屬性集設定

您可以在控制台建立組織使用者時,開啟進階,設定使用者的屬性集,用於控制使用者的存取權限。

  1. 登入阿里雲BaaS控制台

  2. 概覽頁面,找到我的組織地區,找到目標組織,單擊組織的名稱。

  3. 單擊使用者標籤頁。

  4. 單擊新增使用者,在彈框中開啟進階,即可設定使用者的屬性集。

    建立使用者後,可以看到使用者相關的屬性集。

    user

屬性集設定規範:

  • 使用逗號(,)分割為不同的屬性

  • 等號(=)前為屬性名稱, 等號(=)後為該屬性的值

  • 屬性名稱及屬性值必須由英文字母或數字組成

  • 屬性名稱及屬性值均為字串類型

樣本:

屬性集內容:app1Admin=true,permissions=7在使用者的登入認證中,其屬性值為:

 {"attrs":{"app1Admin":"true","permissions":"7","hf.Affiliation":"","hf.EnrollmentID":"abacUser1","hf.Type":"client"}}

其中,hf.EnrollmentIDhf.Typehf.Affiliation為每個身份自動註冊的三個屬性。

鏈碼中擷取使用者屬性

詳細開發文檔請參考:chaincode/shim/ext/cid

id, err := cid.New(stub)

fmt.Println("client ID object:")
fmt.Println(id)
if err != nil {
    return shim.Error(err.Error())
}
val, ok, err = cid.GetAttributeValue(stub, "permissions")
if err != nil {
    return shim.Error(err.Error())
}

if !ok {
    return shim.Error("The client identity does not possess the attribute:permissions")
}

err := cid.AssertAttributeValue(stub, "permissions", "7")
if err != nil {
   return shim.Error("The client identity does not have the permissions")
}

fmt.Println("permissions:")
fmt.Println(val)