Hyperledger-Composer: ACL-правила с условием типа (r.someArray.indexOf (p.getIdentifier ())> -1) не работают - PullRequest
0 голосов
/ 04 сентября 2018

В моем приложении hyperledger-composer правила контроля доступа с условием следующего типа:

(r.someArray.indexOf(p.getIdentifier()) > -1)

не работают.

Вот пример такого ACL-правила:

rule SuperiorsHaveReadAccessToTheirTeamMembers {
    description: "Allow superiors read access to data on their team members"
    participant(p): "org.comp.app.Employee"
    operation: READ
    resource(r): "org.comp.app.Employee"
    condition: (r.superiors.indexOf(p.getIdentifier()) > -1)
    action: ALLOW
}

для уточнения:

participant Employee extends User {
  o String company optional
  --> Employee[] superiors optional
}

Таким образом, вышеприведенное правило контроля доступа просто утверждает, что Сотрудник A имеет READ Доступ к Сотруднику B, если и только если атрибут «вышестоящие» атрибута массива Сотрудника B содержит Сотрудника A (т. Е. Если Сотрудник A является начальником Сотрудника B).

Однако это не работает. Сотрудник A не имеет доступа READ к Сотруднику B. Все остальные правила контроля доступа такого рода также не работают.

Это ошибка в hyperledger-composer?

1 Ответ

0 голосов
/ 05 сентября 2018

нет, это не ошибка. Опять же, потому что вы работаете с массивом объектов ресурсов, как вы его смоделировали. indexOf работает над строкой Object. У меня это работает следующим образом:

rule SuperiorsHaveReadAccessToTheirTeamMembers {
    description: "Allow superiors read access to data on their team members"
    participant(p): "org.comp.app.Employee"
    operation: READ
    resource(r): "org.comp.app.Employee"
    condition: (r.authorized &&    r.authorized.toString().indexOf(p.getIdentifier()) > -1)
    action: ALLOW

}

Кроме того, помните, как работает indexOf: он «пройдет» при первом совпадении. Может быть лучше иметь поле authorized и хранить сокращенные (строковые) идентификаторы в (скажем) поле, например. String[] authorized optional - и в этом случае ваше первоначальное правило будет работать впервые.

...