Ich mache ein Geschäftsmodell mit Hyperledger Composer, wobei ich eine Bank als Teilnehmer und einen Kunden als Asset habe. Die Bank wird wie nachstehend definiert:Der Teilnehmer hat keinen Zugriff auf die Ressource
participant Bank identified by bankId {
o String bankId
o String name
o String code
}
und der Kunde sieht wie folgt aus:
asset Customer identified by aadhaarId {
o String aadhaarId
o String panId
o String firstName
o String lastName
o String contactNo
o String residence
o String accountNumber
o AccountType accountType
o String creationDate
--> Bank bank
}
Ich möchte, dass ein Teilnehmer (Bank) nur diejenigen Kunden aktualisieren können, die zu ihr gehören, und ich möchte erstellen eine Transaktion, um dies zu tun. Also habe ich die folgende Transaktion:
transaction updateCustomer identified by transactionId {
o String transactionId
--> Customer customer
o Customer newDetails
}
und definiert eine Regel in der .acl-Datei wie folgt:
rule bankCanUpdateItsCutomersViaTransaction {
description: "Allow a participant to update it's own resources"
participant(p): "org.acme.sample.Bank"
operation: UPDATE
resource(r): "org.acme.sample.updateCustomer"
condition: (p.getIdentifier() == r.customer.bank.getIdentifier())
action: ALLOW
}
Um dies zu testen, ich einen Teilnehmer erstellt (neben dem bereits vorhandenen admin) und erstellt ein Kunde, der mit diesem Teilnehmer verbunden ist. Ich habe dahinter eine Transaktionsprozessorfunktion, die einfach die Kunden-Asset-Registrierung aktualisiert. Aber wenn ich versuche, die updateCustomer-Transaktion auszuführen, erhalte ich eine Fehlermeldung, dass der Teilnehmer keinen CREATE-Zugriff auf die Ressource hat. Das Problem bleibt bestehen, auch wenn ich den Vorgang in CREATE in der .acl-Datei ändern. Ich denke, dass das Problem in der Bedingung Teil liegt, aber ich bin nicht in der Lage, es zu korrigieren.
Ich habe eine ähnliche Transaktion Kunde für die Erstellung wie folgt:
transaction createCustomer identified by transactionId {
o String transactionId
o Customer newCustomer
}
und die Regel ist wie folgt:
rule bankCanCreateItsCutomersViaTransaction {
description: "Allow a participant to create it's own resources"
participant(p): "org.acme.sample.Bank"
operation: CREATE
resource(r): "org.acme.sample.createCustomer"
condition: (p.getIdentifier() == r.newCustomer.bank.getIdentifier())
action: ALLOW
}
es eine einfache Transaktionsprozessor Funktion hinter dieser createCustomer Transaktion ist, dass fügt den neuen Kunden einfach in die Kunden-Asset-Registrierung ein. Das funktioniert ganz gut, aber die updateCustomer Transaktion funktioniert nicht. Jede Hilfe würde sehr geschätzt werden. Danke :)
Was Sie gesagt hat eigentlich Sinn, aber die createCustomer Transaktion funktioniert gut (ich habe es gerade in der Frage aktualisiert). Wenn ich die Bedingung als Bedingung ändere: (wahr), dann aktualisiert es den Kunden.Also ich denke das Problem ist in der Art, wie ich die Bedingung schreibe. Kann ich von updateCustomer transaction auf den Kunden zugreifen, so wie ich es in der Regel mache? –