2016-09-30 3 views
3

Я пытаюсь разработать очень простой пример в блочной цепочке Hyperledger Fabric с этими шагами: INIT: устанавливает таблицу, содержащую заданную сумму активов «A», на которую ссылается учетная запись номер INVOKE: на данный момент ничего нет QUERY: распечатывает баланс активов для данной учетной записи, если у вас есть учетная запись, или если у вас есть определенная роль, которая позволяет вам просматривать все учетные записи.Hyperledger: войдите в пользовательские атрибуты tcert в chaincode

Итак, в моем membersrvc.yaml, я добавил пользователь, и атрибуты, как это:

eca: 
     affiliations: 
      banks_and_institutions: 
       banks: 
        - bank_a 
        - bank_b 
        - bank_c 
     users: 
       # Users for usecase1 
       client1: 1 client1 bank_a 
       client2: 1 client2 bank_b 
       client3: 1 client3 bank_c 
       back_office: 1 back_office bank_c 
       regulator: 1 regulator bank_c 

    aca: 
       # User attributes for usercase1 
       attribute-entry-1: client1;bank_a;role;client;2015-01-01T00:00:00-03:00;; 
       attribute-entry-2: client1;bank_a;account;client1;2015-01-01T00:00:00-03:00;; 
       attribute-entry-3: client2;bank_b;role;client;2015-01-01T00:00:00-03:00;; 
       attribute-entry-4: client2;bank_b;account;client2;2015-01-01T00:00:00-03:00;; 
       attribute-entry-5: client3;bank_c;role;client;2015-01-01T00:00:00-03:00;; 
       attribute-entry-6: client3;bank_c;account;client3;2015-01-01T00:00:00-03:00;; 
       attribute-entry-7: back_office;bank_c;role;back_office;2015-01-01T00:00:00-03:00;; 
       attribute-entry-8: back_office;bank_c;account;back_office;2015-01-01T00:00:00-03:00;; 
       attribute-entry-9: regulator;bank_c;role;regulator;2015-01-01T00:00:00-03:00;; 
       attribute-entry-10: regulator;bank_c;account;regulator;2015-01-01T00:00:00-03:00;; 

      address: localhost:7054 
      server-name: acap 
      enabled: true 

Но мой вопрос:

Как я могу получить и проверить эту информацию в моей функции запроса цепного кода?

Что я имею в виду, что, с поддержкой безопасности и команды запуска с помощью данного пользователя:

peer network login client1 -p client1 

peer chaincode query -u client1 -n usecase1 -c '{"Function":"assets", "Args": ["some_username"]}' 

быть в состоянии получить client1 роль, & счет и применить мое правило.

Спасибо!

ответ

1

Пример того, как работать с атрибутами можно найти здесь:

github.com/hyperledger/fabric/examples/chaincode/go/asset_management_with_roles 

В запросе можно использовать метод прокладок ReadCertAttribute:

callerRole, err := stub.ReadCertAttribute("role") 
if err != nil { 
    fmt.Printf("Error reading attribute 'role' [%v] \n", err) 
    return nil, fmt.Errorf("Failed fetching caller role. Error was [%v]", err) 
} 

Имейте в виду, что атрибуты имена должны быть четко объявлены в командах «Развернуть/Запросить/Вызывать» («атрибуты»: [«Роль», «Учетная запись»]):

Пример развертывания:

curl -XPOST -d '{"jsonrpc": "2.0", "method": "deploy", "params": {"type": 1,"chaincodeID": {"path": "github.com/PATH/TO/YOUR/CHAINCODE","language": "GOLANG"}, "ctorMsg": {"Function":"init", "args": ["some_args"] },"secureContext": "client1", "attributes": ["role", "account"]},"id": 0}' http://localhost:7050/chaincode 

Пример для запроса:

curl -XPOST -d '{"jsonrpc": "2.0", "method": "query", "params": {"type": 1, "chaincodeID": {"name": "!!CHAINCODE_ID!!"}, "ctorMsg": {"Function":"assets", "args": ["some_username"]}, "secureContext": "client1", "attributes": ["role", "account"]}, "id": 1}' http://localhost:7050/chaincode 
Смежные вопросы