基于屬性的訪問控制
Hyperledger Fabric 支持使用基于屬性的訪問控制(ABAC, Attribute-Based Access Control)來控制用戶的訪問權限。在進行用戶的身份注冊時,登錄證書(ECert)可以包含一個或多個屬性名稱和值,鏈碼運行時可以提取屬性值來進行訪問控制決策。
例如,您正在開發一個名為 app1 的應用,只有 app1 的管理員才可以訪問一個特定的 chaincode 操作。您的 chaincode 可以根據調用者的證書中是否包含的 app1Admin 屬性以及該屬性值是否為 “true” 來決定是否允許訪問。
關于 Hyperledger Fabric ABAC 功能,更多請參見 Attribute-Based Access Control。
屬性集設置
您可以在控制臺創建組織用戶時,打開高級,設置用戶的屬性集,用于控制用戶的訪問權限。
登錄阿里云BaaS控制臺。
在概覽頁面,找到我的組織區域,找到目標組織,單擊組織的名稱。
單擊用戶標簽頁。
單擊新增用戶,在彈框中打開高級,即可設置用戶的屬性集。
創建用戶后,可以看到用戶相關的屬性集。
屬性集設置規范:
使用逗號(,)分割為不同的屬性
等號(=)前為屬性名稱, 等號(=)后為該屬性的值
屬性名稱及屬性值必須由英文字母或數字組成
屬性名稱及屬性值均為字符串類型
示例:
屬性集內容:app1Admin=true,permissions=7
在用戶的登錄證書中,其屬性值為:
{"attrs":{"app1Admin":"true","permissions":"7","hf.Affiliation":"","hf.EnrollmentID":"abacUser1","hf.Type":"client"}}
其中,hf.EnrollmentID
、hf.Type
、hf.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)
文檔內容是否對您有幫助?