Правильное определение правил ACL для hyperledger-composer для межресурсного доступа - PullRequest
0 голосов
/ 01 марта 2019

У меня есть такая структура в моем файле model.cto:

namespace org.gov.budget

asset Tax identified by Id{
  o String Id
  --> TaxPayer payer
  o Double amount
  o Integer year
  o Boolean processed
}

asset BudgetAccount identified by Id{
  o String Id
  o Double amount
}

participant Government identified by Id{
  o String Id
  --> BudgetAccount account
}

participant TaxPayer identified by PANID{
  o String PANID
  o String name
  o Double income
  o Integer taxSlab
}

transaction PayTax{
  -->Tax tax
  -->Government gov
}

Here is the implementation for the transaction.

async function payTax(tax){
  tax.tax.amount = tax.tax.payer.income*tax.tax.payer.taxSlab*0.05;
  tax.gov.account.amount+=tax.tax.amount;
  tax.tax.processed = true;
  let assetRegistry = await getAssetRegistry('org.gov.budget.BudgetAccount');
  await assetRegistry.update(tax.gov.account);
  assetRegistry = await getAssetRegistry('org.gov.budget.Tax');
  await assetRegistry.update(tax.tax);
}

Теперь, когда я пытаюсь отправить транзакцию PayTax , вошедшая в систему как участник TaxPayer (не администратор) Я запускаюво все эти проблемы, что налогоплательщик не имеет доступа READ к ресурсам, участвующим в транзакции.Мне пришлось добавить два нижеприведенных правила, чтобы устранить первую проблему доступа к READ, связанную с тем, что государственный объект говорит «G1», но после этого выдает ошибку, говорящую, что у TaxPayer нет доступа READ к типу BugdetAccount «B1», который связан с «G1».».Нужно ли мне предоставлять доступ на чтение для каждого отдельного актива / участника / типа, доступ к которому осуществляется в рамках составного типа, как в BudgetAccount в Правительстве?Разве это не становится очень сложным, если много составных сущностей связаны друг с другом?

rule abc{
  description: "Grant business network administrators full access to system resources"
    participant: "org.gov.budget.TaxPayer"
    operation: READ
    resource: "org.hyperledger.composer.system.ParticipantRegistry"
    action: ALLOW
}

rule abc4{
  description: "Grant business network administrators full access to system resources"
    participant: "org.gov.budget.TaxPayer"
    operation: READ
    resource: "org.gov.budget.Government"
    action: ALLOW
}

1 Ответ

0 голосов
/ 07 марта 2019

Да, система децентрализации Composer очень жесткая, поэтому вам необходимо предоставить каждому участнику разрешение на определенные роли.Это делает вашу сеть безопасной.

Если вы хотите совершить транзакцию для налогоплательщика, вы должны предоставить необходимые права для выполнения транзакции, такие как: READ Tax, Government, UPDATE Government, Tax и CREATE Tax ...

...