在将条件放在ACL文件中的其他资源上时,我们如何才能对特定资源进行READ访问?

时间:2017-06-16 06:01:06

标签: hyperledger-composer

我想要做的是给特定参与者提供READ ACCESS其他参与者的字段,但是将条件放在第三资源上。

例如:

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
    }

所以在这里我想基于某些资产记录访问参与者1的个人资料。

是否可以在作曲家中使用这个东西,如果没有,那么其他选项是什么?

1 个答案:

答案 0 :(得分:0)

我认为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
}

然后,您可以从ACL规则访问相关的record字段:

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