Как ограничить вызовы функций определенным типом пользователей в Fabric? - PullRequest
0 голосов
/ 22 февраля 2019

Я недавно перешел от использования Composer к написанию ChainCode в Go.В Composer, используя ACL, я мог ограничить определенные транзакции определенными participant типами.

Я пытаюсь построить многоорганизованную сеть, в которой пользовательские типы определяются как структуры в Go - Client Agent и Manager

Я хочу Client для доступа к определенным транзакциям, Agent для доступа к другому набору транзакций и Manager для доступа ко всем Agent и некоторым другим транзакциям.

Как сделатьЯ реализую это с помощью кода цепи Fabric Go?Цени любую помощь!

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

ОК, поэтому предположим, что Алиса - агент.Есть функция 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.Я сделал это в демонстрационных целях, технически вы хотели бы извлечь сертификат Алисы и затем напрямую запросить Алису (я могу сделать это в nodejs цепном коде, но не могу найти точный вызов API в go)
...