包含 ACL 条件中的函数

Includes function in ACL condition

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

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

这是个好问题;下面有一个更新的 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() 函数的使用,而不是尝试直接访问标识符。