更新时间:2021-01-11 19:16
Hyperledger Fabric 支持使用基于属性的访问控制(ABAC, Attribute-Based Access Control)来控制用户的访问权限。在进行用户的身份注册时,登录证书(ECert)可以包含一个或多个属性名称和值,链码运行时可以提取属性值来进行访问控制决策。
例如,您正在开发一个名为 app1 的应用,只有 app1 的管理员才可以访问一个特定的 chaincode 操作。您的 chaincode 可以根据调用者的证书中是否包含的 app1Admin 属性以及该属性值是否为 “true” 来决定是否允许访问。
关于 Hyperledger Fabric ABAC 功能,更多请参见 Attribute-Based Access Control。
您可以在控制台创建组织用户时,打开高级,设置用户的属性集,用于控制用户的访问权限。
创建用户后,可以看到用户相关的属性集
示例:
属性集内容: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)
在文档使用中是否遇到以下问题
更多建议
匿名提交