Hyperledger composer Access Control, позволяет создавать в транзакции - PullRequest
0 голосов
/ 01 июня 2018

Вот что я хочу реализовать:

Я хочу разрешить пользователю (типу участника) создавать актив, но делать это только в транзакции, тогда как за пределами этой транзакции я хочу запретить все права пользователя.для создания активов.

Я пытался решить это, используя условие в файле .acl правила, используя функцию:

rule UserCanCreateAssetOnlyInTransaction {
    description: "Deny all participants create access to all userWallets if not in transaction"
    participant(p): "com.example.User"
    operation: CREATE
    resource(r): "com.example.UserAsset"
    condition:(isInTransactionF())
    action: ALLOW 
}

Затем в транзакции я создаю переменную как var isInTransaction = true;, а в logic.jsфайл, который я добавил:

/**
@returns {boolean} boolean true/false
*/
function isInTransactionF(){
    if(isInTransaction){
      return true; 
    }else{
      return false;
    }   
}

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

1 Ответ

0 голосов
/ 01 июня 2018

для достижения того, что вы хотите в своей функции - вы бы сказали:

/**
@returns {boolean} boolean true/false
*/
function isInTransactionF() {
    var isInTransaction = true ;  // Boolean
    if(isInTransaction) {
    // if( Boolean(isInTransaction)) { // alternative
      return true; 
    } else{
      return false;
    }   
}

Ваш текущий ACL будет работать.

Я могу вызвать console.log, чтобы увидеть возвращенный результат

console.log("The return result is " + isInTransactionF() );`  // true

Чтобы ограничить участника созданием актива ТОЛЬКО через определенный класс транзакций - правило будет выглядеть примерно так (т. Е. Актив может быть создан только через этот класс - неявно его следует запретить в другом месте, предполагая, что естьникакие другие правила создания активов):

rule CreateAssetThruTxn {
    description: "sample""
    participant(p): "com.example.User"
    operation: CREATE
    resource(r): "com.example.UserAsset"
    transaction(tx): "com.example.AssetCreate"
    condition:(true)
    action: ALLOW 
}

Если ваш ACL не работает, вам нужно посмотреть, какие другие правила ACL могут разрешать создание этого ресурса с помощью другого средства, но предоставленное мной правило будетобычный способ контролировать это (на основе информации, которую вы указали в вопросе)

...