- Примером использования 3 ресурсов может быть что-то вроде (пример):
// во-первых, доступ для вызова самого ресурса транзакции
rule Transaction_access {
description: "Can generate transaction"
participant: "org.acme.account.AccountTrader"
operation: CREATE
resource: "org.acme.account.TransferAmount"
action: ALLOW
}
// далее, (пример) правило динамического ACL, которое оценивает, между кем выполняется транзакция
rule BiTrade_betweenTraders_only {
description: "Only Allow Updatee between Transferor/Transferee via named transaction"
participant(p): "org.acme.account.AccountTrader"
operation: ALL
resource(v): "org.acme.account.BankAccount"
transaction(tx): "org.acme.account.TransferAmount"
condition: ( p.getIdentifier() === v.owner.getIdentifier() && v.getIdentifier() === tx.targetAccount.getIdentifier() )
action: ALLOW
}
ОБНОВЛЕНО пунктом 2:
- Примером предоставления доступа к ресурсу транзакции на основе владения активом участником (оба получены из объекта транзакции) может быть:
rule my_restricted_Transaction_access {
description: "as per description above"
participant(p): "org.acme.account.AccountTrader"
operation: CREATE
resource(v): "org.acme.account.TransferAmount"
condition: ( p.getIdentifier() === v.account.owner.getIdentifier() )
action: ALLOW
}
, где TransferAmount
может быть определено как:
transaction TransferAmount {
--> Account account // asset
}
и account
имеют поле --> owner
, указывающее на AccountTrader (участник, в моем исходном примере - и т. Д. И т. Д.) - имейте в виду, что ваши ACL-списки должны позволять участнику иметь доступ к соответствующему активу и целевой ресурс владельца ресурса тоже.
очевидно, что это простой пример - но вы можете определить свою функцию (чтобы сделать эквивалентную проверку для вашей модели) в разделе condition
. Если вы добавили JS-скрипт в свою BNA в /lib
(и обновили бизнес-сеть на Fabric, чтобы она вступила в силу), вам просто нужно беспокоиться о том, соответствует ли имя вашей функции тому, что вы назвали (опять же, ссылки, которые я отправлено, вы должны предоставить четкий пример использования).
- Вызов функции как части вашего условия ACL прост - вы можете увидеть пример этого в этом тестовом файле github -> функция (JS) здесь https://github.com/hyperledger/composer/blob/master/packages/composer-tests-functional/systest/data/accesscontrols.js#L23 и соответствующий (вызывающий) набор правил ACL здесь -> https://github.com/hyperledger/composer/blob/master/packages/composer-tests-functional/systest/data/accesscontrols.acl#L124
ОБНОВЛЕНО пункт 3:
например, в вашем файле permissions.acl правило вроде:
rule rule_func_condition {
description: "Allow all participants access to all resources"
participant(p): "org.acme.account.AccountTrader"
operation: CREATE
resource(a): "org.example.account.TransferAmount"
condition: (testOwnership(a, p))
action: ALLOW
}
в вашем файле functions.js (или в любом другом месте) в папке /lib
(или, если хотите, вы можете использовать его в существующем файле logic.js):
/**
* Test that the specified asset is owned by the specified participant.
* @param {Resource} asset The asset.
* @param {Resource} participant The participant.
* @return {boolean} True if yes, false if no.
*/
function testOwnership(asset, participant) {
return asset.owner.getIdentifier() === participant.getIdentifier();
}
где asset
и participant
объекты передаются в этот конкретный пример функции.