DateTime проверка в разрешениях Hyperledger Fabric - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь проверить, могу ли я включить некоторые (сложные) условия в файлmission.acl в матрице композитора Hyperledger.

Я хотел знать две вещи.Ниже приводится компонент cto актива:

asset Document identified by documentId {
  o String documentId
  o String value
  o DocumentType type
  o String owner
  o String reviewer optional
  o String status
  o String mediatype
  o DateTime validFrom
  o DateTime validTo
}

rule nurseCanViewDocumentsWithinExpiry {
    description: "Allow all participants full access to their assets"
    participant(p): "org.apatics.net.Participants"
    operation: READ
    resource(r): "org.apatics.net.Document"
    condition: ##HOW TO GIVE THE FUNCTION HERE##
    action: ALLOW
}

1) Могу ли я включить некоторые сложные условия?Через функцию?Я попробовал функцию следующим образом:

  function (r){
    var currentDate = new Date();
    if (new Date() > r.validTo && r.reviewer == p.participantId && p.type == "test")
      return true
    else
      return false
  }

Вышеуказанная функция всегда возвращает true?

2) Будет ли работать проверка даты?Новая Date () действительно даст мне текущую дату и время?

Заранее спасибо.

С уважением, Хари

1 Ответ

0 голосов
/ 02 октября 2018

Вы близки к выполнению этой работы: -)

Начиная с базовой сети образцов (пространство имен 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) в функцию сценария, а также передаю Участника.Я не использую участника, но оставил его там, так как он может вам понадобиться.)

...