Разрешить участникам просматривать транзакции, которые они представили - PullRequest
0 голосов
/ 29 мая 2018

Я создал бизнес-сеть, используя Hyperledger Composer.Я пытаюсь установить разрешения таким образом, чтобы участники могли просматривать только те транзакции, которые они представили.

Попытка доступа к транзакциям (называемая TradeInstrument) либо через GET-запрос к API REST композитора, либо с помощью клиентского API работает при вызове от имени администратора.Это понятно, так как я разрешил администратору доступ ко всем ресурсам.Однако, когда я делаю запрос в качестве участника, возвращается пустой массив.Как правильно установить разрешения для того, чего я пытаюсь достичь?

Вот мои файлы модели и разрешений:

model.cto

namespace org.example.cashbalance

participant Portfolio identified by portfolioNumber {
  o String portfolioNumber
  o String portfolioName
}

transaction TradeInstrument {
  --> Portfolio participant
  o Double settlementAmountBase 
}

разрешения.acl

rule ParticipantCanSeeOwnTransactions {
    description: "Allow participants to view transactions they have submitted"
    participant(t): "org.example.cashbalance.Portfolio"
    operation: ALL
    resource(v): "org.example.cashbalance.TradeInstrument"
    condition: (v.participantInvoking.getIdentifier() == t.getIdentifier())
    action: ALLOW
}

rule NetworkAdminUser {
    description: "Grant business network administrators full access to user resources"
    participant: "org.hyperledger.composer.system.NetworkAdmin"
    operation: ALL
    resource: "**"
    action: ALLOW
}

rule NetworkAdminSystem {
    description: "Grant business network administrators full access to system resources"
    participant: "org.hyperledger.composer.system.NetworkAdmin"
    operation: ALL
    resource: "org.hyperledger.composer.system.**"
    action: ALLOW
}

rule SystemACL {
  description:  "System ACL to permit all access"
  participant: "ANY"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

1 Ответ

0 голосов
/ 30 мая 2018

Вы говорите об исторических транзакциях (уже отправленных), поэтому вам нужно ограничить этот реестр, например.

rule PortfolioParticipantSeesOwnHistoryOnly {
  description: "See history of their own transactions only"
  participant(t): "org.example.cashbalance.Portfolio"
  operation: READ
  resource(v): "org.hyperledger.composer.system.HistorianRecord"
  condition: (v.participantInvoking.getIdentifier() != t.getIdentifier())
  action: DENY
}

Не думаю, что приведенное ниже правило что-нибудь сделает (участникInvoking является атрибутом 'HistorianRecord')

rule ParticipantCanSeeOwnTransactions {
    description: "Allow participants to view transactions they have submitted"
    participant(t): "org.example.cashbalance.Portfolio"
    operation: ALL
    resource(v): "org.example.cashbalance.TradeInstrument"
    condition: (v.participantInvoking.getIdentifier() == t.getIdentifier())
    action: ALLOW
}
...