我最近从使用Composer转到在Go中编写ChainCode。在Composer中,使用ACL,我可以将某些事务限制为特定的participant
类型。
我正在尝试建立一个多组织网络,其中将用户“类型”定义为Go中的结构-Client
Agent
和Manager
我希望Client
可以访问某些交易,Agent
可以访问另一组交易,并且Manager
可以访问所有Agent
和更多交易。
如何使用Fabric Go链码实现此目标?感谢任何帮助!
谢谢
答案 0 :(得分:1)
好的,所以让我们假设爱丽丝是一名特工。您要确保只有Alice可以调用函数onlyAgent()
。会是这样的
func (t *SimpleChaincode) createParticipant (stub shim.ChaincodeStubInterface, args []string) pb.Response {
username := args[0]; // This would be Alice
type := args[1]; // This should be Agent
user := &marble{type , username }
userAsJsonBues, err := json.Marshal(user )
err = stub.PutState(marbleName, userAsJsonBues);
return shim.Success(nil);
}
func (t *SimpleChaincode) onlyAgent(stub shim.ChaincodeStubInterface, args []string) pb.Response {
username := args[0]; // Expects to be Alice
aliceAsBytes, err := stub.GetState(username)
alice:= User{}
err = json.Unmarshal(aliceAsBytes, &alice)
// alice.user should return Agent. Perform whatever checks you want
}
这应该使您大致了解如何进行,需要记住几件事
onlyAgent
中。我这样做是出于说明的目的,从技术上讲,您可能想要提取Alice的证书,然后直接从中查询Alice(我可以在nodejs
链码中进行此操作,但似乎无法在{{1} })