我正在将结构cid用于ABAC链代码。它工作正常;但是,一旦更新了身份属性(通过节点sdk),ABAC便无法按预期工作。
我的工作流程:
1。通过节点SDK注册和注册身份。
附加价值
属性:[{“名称”:“角色”,“值”:“客户”,“证书”:true}]
2.Chaincode调用。 ABAC按预期工作。
身份,错误:= cid.New(存根)
err = identity.AssertAttributeValue(“ role”,“ client”)
附加价值
属性:[{“名称”:“角色”,“值”:“用户”,“证书”:true}]
当我记录该属性时,我发现身份仍然带有旧角色(客户端)而不是更新值(用户);但是 fabric-ca-server.db 用户表具有最新的属性值(用户)。这里有点困惑!
我缺少任何步骤吗?谁能帮助我找出造成此情况的确切原因?
编辑:
Fabric v1.4
答案 0 :(得分:2)
我下面的示例工作流程使用fabric-ca-client二进制CLI-而不是客户端代码。但是我确实在我的chaincode /智能合约中使用了cid对象。
注册 ID时,会在CA数据库中创建一个条目。
注册 ID时,将下载证书和密钥-如果您包含ecert标志,则该属性将包含在证书中。
如果您修改一个ID,则CA数据库中的条目。 (但是证书仍然具有旧值)
重新注册 ID时,将替换证书,并且新证书包含新的修改后的属性值。当您使用带有新证书的连接到链码时, cid 对象将显示新值。