Вы близки к выполнению этой работы: -)
Начиная с базовой сети образцов (пространство имен org.example.basic
), я добавил этот актив:
asset MedDocument identified by documentId {
o String documentId
o String value
o String type
o String owner
o Boolean reviewer optional
o String status
o String mediatype
o DateTime validFrom
o DateTime validTo
}
Я создал эти тестовые данные:
{
"$class": "org.example.basic.MedDocument",
"documentId": "01",
"value": "Treatment Plan",
"type": "TP",
"owner": "Dr02",
"reviewer": true,
"status": "live",
"mediatype": "paper",
"validFrom": "2018-10-01T09:03:22.171Z",
"validTo": "2018-10-10T09:03:22.171Z",
}
{
"$class": "org.example.basic.MedDocument",
"documentId": "02",
"value": "Treatment Plan",
"type": "TP",
"owner": "Dr02",
"reviewer": true,
"status": "live",
"mediatype": "paper",
"validFrom": "2018-10-11T09:03:22.171Z",
"validTo": "2018-10-20T09:03:22.171Z",
}
Я добавил это правило ACL - и удалил правило EverybodyCanReadEverything
!
rule nurseCanViewDocumentsWithinExpiry {
description: "Allow all participants full access to their assets"
participant(p): "org.example.basic.SampleParticipant"
operation: READ
resource(r): "org.example.basic.MedDocument"
condition: (testRange(r, p))
action: ALLOW
}
Я добавил эту функциюсогласно моей логике JS:
/**
* Test that the specified asset (medical doc) is within range.
* @param {Resource} asset The asset.
* @param {Resource} participant The participant.
* @return {boolean} True if yes, false if no.
*/
function testRange(asset, participant) {
var current=new Date();
return ((current > asset.validFrom) && (current < asset.validTo));
}
Я создал нового участника SampleParticipant и выдал новый идентификатор.Результат (запуск 2 октября!) Состоял в том, что я мог видеть первый MedDocument, но не второй.
Я передаю актив (MedDocument) в функцию сценария, а также передаю Участника.Я не использую участника, но оставил его там, так как он может вам понадобиться.)