Как мы можем предоставить доступ ЧТЕНИЕ к определенному ресурсу, ставя условие для какого-либо другого ресурса в файле ACL?

Что я хочу сделать, так это предоставить ДОСТУП ДЛЯ ЧТЕНИЯ конкретному участнику полей других участников, но поставить условие на третий ресурс.

Eg:

rule SampleRule{
       description: "Allow the Participant1 to view Participant2 profile"
       participant(m): "org.sample.blockchain.Participant1"
       operation: READ
       resource(v): "org.sample.blockchain.Participant2"
       condition:(
                  v.getIdentifier() == Record.Participant1.getIdentifier() 
                     && m.getIdentifier() == Record.Participant2.getIdentifier()
                )
       action: ALLOW
    }
    asset Record identified by Id {
       o String Id
       --> Participant1 Participant1
       --> Participant2 Participant2
    }
    participant Participant1 identified by EmailId{
       o String EmailId
       o String Name
       o Integer Age
    }
    participant Participant2 identified by EmailId{
       o String EmailId
       o String Name
       o Integer Age
    }

Итак, здесь я хочу предоставить доступ к профилю участника2 участнику1 на основе некоторой записи актива.

Возможно ли это в композиторе, и если нет, то какие другие варианты?


person VipulBajaj    schedule 16.06.2017    source источник


Ответы (1)


Я не верю, что в настоящее время это возможно с Hyperledger Composer. Вы не можете найти несвязанный актив в правиле ACL.

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

asset Record identified by Id {
    o String Id
    --> Participant1 Participant1
    --> Participant2 Participant2
}

participant Participant1 identified by EmailId{
    o String EmailId
    o String Name
    o Integer Age
    --> Record record // note the new record field
}

Затем вы можете получить доступ к соответствующему полю record из правила ACL:

rule SampleRule {
    description: "Allow the Participant1 to view Participant2 profile"
    participant(m): "org.sample.blockchain.Participant1"
    operation: READ
    resource(v): "org.sample.blockchain.Participant2"
    condition: (
        m.record.getIdentifier() === v.record.getIdentifier()
    )
    action: ALLOW
}

На данный момент у нас есть проблема с GitHub, чтобы решить отношения со связанными активами, что позволит вам искать все поля связанного актива:

https://github.com/hyperledger/composer/issues/1007

person Simon Stone    schedule 20.06.2017
comment
Привет, Саймон, мне любопытно, есть ли какие-либо обновления по этой теме с версией композитора v0.20.5? Дело в том, что при вашем подходе к ссылке на объект Record в ресурсе Participant1 во время создания экземпляра Participant1 также должен быть создан экземпляр Record; если вы не сделаете это необязательным. Это правильно? Если это так, и вы делаете это необязательным, то вы должны знать и обновлять ссылку в Participant1, если создается Record... кажется немного неудобным, так как есть ссылки, разрешающие отношения, почему бы также не разрешить на других ресурсах? - person Timo Wagner; 16.01.2019