包含ACL条件下的功能

时间:2017-06-09 13:32:04

标签: hyperledger-fabric hyperledger-composer

我有一个名为MedicalFile的资产,其中包含对组织的引用。参与者HealthCareProfessional也属于一个组织。

现在我想定义一条ACL规则,该规则限制医疗保健专业人员仅查看MedicalFile与其组织相关的医疗文件。

我提出了以下规则:

rule OrganisationMedicalFilePermission {
    description: "An organisation may updates a medical file which they have permission from"
    participant(h): "nl.epd.blockchain.HealthCareProfessional"
    operation: ALL
    resource(m): "nl.epd.blockchain.MedicalFile"
    condition: (m.organisations.includes(h.organisation))
    action: ALLOW

}

一旦我使用Loopback调用RESTful API,就会产生一个空数组。我被认证为医疗保健专业人员。

资产&参与者:

asset Organisation identified by id {
      o String id
      o String name
      o String city
      o String zipCode
      o String street
      o String houseNumber
      o String houseNumberExtra optional
      o OrganisationType organisationType
}

asset MedicalFile identified by bsn {
  o String                 bsn
  --> Patient              owner
  --> Patient[]            mentors optional
  --> Organisation[]       organisations optional
  o Visit[]                visits optional
  o String[]               allergies optional
  o Treatment[]            treatments optional
  o Medicine[]             medicine optional
}

participant HealthCareProfessional identified by bsn {
  o String bsn
  o String firstName
  o String namePrefix optional
  o String lastName
  --> Organisation organisation
}

我的问题是,是否可以创建验证此问题的条件。如果没有,我的选择是什么?

1 个答案:

答案 0 :(得分:5)

这是一个很好的问题;我已经使用online playground测试了下面的更新ACL。

这是更新的规则:

rule LimitAccess {
   description: "An organisation may updates a medical file which they have permission from"
   participant(h): "nl.epd.blockchain.HealthCareProfessional"
   operation: ALL
   resource(m): "nl.epd.blockchain.MedicalFile"
   condition: (
     m.organisations.some(function (organisation) {
        return organisation.getIdentifier() === h.organisation.getIdentifier();  
        } )
   )
   action: ALLOW
}

some函数是扫描关系数组的关键部分。另请注意使用getIdentifier()函数,而不是尝试直接访问标识符。