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
}