包含 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()
函数的使用,而不是尝试直接访问标识符。
我有一个名为 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()
函数的使用,而不是尝试直接访问标识符。