hyperledger composer - обнаружен циклический API

Я пытаюсь реализовать разрешения в многопользовательском режиме на композитор, и для этого мой файл ACL выглядит так:

rule R1 {
  description: "..."
  participant(p): "org.example.SampleParticipantOne"
  operation: ALL
  resource(d): "org.example.SampleParticipantThree"         // resource is of participant type
  condition: (p.sampleRelation.getIdentifier() === d.sampleRelation.getIdentifier())
  action: ALLOW
}

rule R2 {
  description: "..."
  participant(p): "org.example.SampleParticipantOne"
  operation: ALL
  resource(d): "org.example.SampleParticipantThree"
  condition: (!(p.sampleRelation.getIdentifier() === d.sampleRelation.getIdentifier()))
  action: DENY
}

rule SystemACL {
  description:  "System ACL to permit all access"
  participant: "org.hyperledger.composer.system.Participant"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

rule NetworkAdminUser {
  description: "Grant business network administrators full access to user resources"
  participant: "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL
  resource: "**"
  action: ALLOW
}

rule NetworkAdminSystem {
  description: "Grant business network administrators full access to system resources"
  participant: "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

rule AllowAll {
  description: "..."
  participant: "org.example.**"
  operation: ALL
  resource: "org.example.**"
  action: ALLOW
}

и базовые модели выглядят так:

namespace org.example

participant SampleParticipantOne identified by id {
  o String id
  --> SampleParticipantTwo sampleRelation
  o string someMoreFields
}

participant SampleParticipantTwo identified by id {
  o String id
  o string someMoreFields
}

participant SampleParticipantThree identified by id {
  o String id
  --> SampleParticipantTwo sampleRelation
  o string someMoreFields
}

но когда я пытаюсь получить SampleParticipantThree, в то время как я ношу карту SampleParticipantOne, он возвращает мне пустой массив и журналы докера ошибки однорангового шоу что-то вроде

ERROR :AccessController :checkRule() Error: Cyclic ACL Rule detected, rule condition is invoking the same rule

кто-нибудь может мне помочь с этим?

1 ответ

Вы должны удалить правило R2 потому что, когда у вас есть правила в permissions.acl файл все заблокировано, то вы даете разрешения, так что вы уже разрешили участнику SimpleParticipantOne чтобы получить доступ SampleParticipantThree ресурс.

Я также удалил SystemACL править. Это также противоречило NetworkAdminSystem,

Попробуй это:

rule R1 {
  description: "..."
  participant(p): "org.example.SampleParticipantOne"
  operation: ALL
  resource(d): "org.example.SampleParticipantThree"         // resource is of participant type
  condition: (p.sampleRelation.getIdentifier() === d.sampleRelation.getIdentifier())
  action: ALLOW
}

rule NetworkAdminUser {
  description: "Grant business network administrators full access to user resources"
  participant: "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL
  resource: "**"
  action: ALLOW
}

rule NetworkAdminSystem {
  description: "Grant business network administrators full access to system resources"
  participant: "org.hyperledger.composer.system.NetworkAdmin"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

rule AllowAll {
  description: "..."
  participant: "org.example.**"
  operation: ALL
  resource: "org.example.**"
  action: ALLOW
}
Другие вопросы по тегам