Как ограничить вызовы функций определенным типом пользователей в Fabric?
Недавно я перешел от использования Composer к написанию ChainCode в Go. В Composer, используя ACL, я мог ограничить определенные транзакции конкретными participant
типы.
Я пытаюсь построить сеть с несколькими организациями, в которой пользовательские типы определены как структуры в Go. Client
Agent
а также 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
}
Это должно дать вам общее представление о том, как действовать, пару вещей, которые нужно запомнить
- Этот пример требует, чтобы имя Алиса передавалось как параметр в
onlyAgent
, Я сделал это в демонстрационных целях, технически вы хотели бы извлечь сертификат Алисы, а затем запросить Алису непосредственно из этого (я могу сделать это вnodejs
код цепи, но не могу найти точный вызов API вgo
)