如何向用户证书添加角色并在链代码中使用它们?

How to add roles to user's certificate and use them in chaincode?

我使用 "IBM‌ Blockchain Platform" 扩展和 nodejs 在 hyperledger fabric 上开发了一个应用程序。我使用 "fabric-ca-client v1.3.0" 模块来注册用户和管理员证书。我想为用户添加角色,并根据我的链代码上的用户角色进行访问控制。我尝试注册多个证书,但此模块总是注册具有空角色和从属关系的证书,如下所示:

{"name":"admin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"...","identity":{"..."}}}

我在 hyperledger shim documentation 上找到了关于在链码上使用角色的内容:

const ClientIdentity = require('fabric-shim').ClientIdentity;

let cid = new ClientIdentity(stub); 
object passed to Init() and Invoke() methods
if (cid.assertAttributeValue('hf.role', 'auditor')) {
   // proceed to carry out auditing
}

但我没有找到任何解决方案来解决如何注册和注册具有 'hf.role' 属性的用户

您必须先注册用户,然后再注册用户。您可以通过 cmdline 和 REST 执行此操作。对于注册用户时的 cmdline,您需要将其他属性传递为:

--id.attrs 'role=writer:ecert,email=user1@gmail.com'

然后在注册时:

--enrollment.attrs "role=writer,email,phone:opt"

在链代码中,您可以通过以下方式访问属性:

let cid = new ClientIdentity(stub); 
if (cid.assertAttributeValue('role', 'writer')) { .. }