Как ограничить вызовы функций определенным типом пользователей в Fabric?

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

Я пытаюсь построить сеть с несколькими организациями, в которой пользовательские типы определены как структуры в Go. ClientAgent а также Manager

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

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

Спасибо

1 ответ

Итак, давайте предположим, что Алиса - агент. Есть функция 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)
Другие вопросы по тегам