2

我有一个名为 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
}

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

4

1 回答 1

5

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

这是更新的规则:

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()函数的使用,而不是尝试直接访问标识符。

于 2017-06-09T15:22:01.557 回答