如何在Fabric中将函数调用限制为某些“类型”用户?

时间:2019-02-22 03:11:56

标签: hyperledger-fabric hyperledger-fabric-sdk-go

我最近从使用Composer转到在Go中编写ChainCode。在Composer中,使用ACL,我可以将某些事务限制为特定的participant类型。

我正在尝试建立一个多组织网络,其中将用户“类型”定义为Go中的结构-Client AgentManager

我希望Client可以访问某些交易,Agent可以访问另一组交易,并且Manager可以访问所有Agent和更多交易。

如何使用Fabric Go链码实现此目标?感谢任何帮助!

谢谢

1 个答案:

答案 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
}

这应该使您大致了解如何进行,需要记住几件事

  1. 此示例要求将名称爱丽丝作为参数传递到onlyAgent中。我这样做是出于说明的目的,从技术上讲,您可能想要提取Alice的证书,然后直接从中查询Alice(我可以在nodejs链码中进行此操作,但似乎无法在{{1} })