AccessException: участник - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь создать пример приложения BlockChain, состоящего из покупателя, продавца, поставщика, грузоотправителя и т. Д. Как покупатель я могу успешно создать транзакцию покупки, а также обновить транзакцию от созданной до покупки.Теперь, когда заказ находится в состоянии «Покупка», Продавец может изменить заказ, чтобы поручить Провайдеру выполнить заказ полностью.По ряду причин Продавец НЕ может это сделать.Я прикрепляю модель, ACL и трассировку стека исключений, чтобы кто-то посмотрел на это и сказал, что то, что я делаю, правильно или неправильно.Если вы видите что-то не так, пожалуйста, посоветуйте правильный подход к этому.TIA.

Permissions.acl

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
}
/**
* end of V0.14 additions
*/

/**
*
**/
rule BuyerACLCreate {
    description: "Enable Buyers to execute all actions on an Order"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.CreateOrder"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule BuyerACLBuy {
    description: "Enable a Buyer to update an Order from Create to Buy"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.Buy"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule BuyerACLCancel {
    description: "Enable a Buyer to CANCEL an Order"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE, DELETE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.OrderCancel"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule BuyerACLDispute {
    description: "Enable a Buyer to raise a DISPUTE on an Order"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.Dispute"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule BuyerACLResolve {
    description: "Enable a Buyer to RESOLVE a DISPUTEd Order"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.Resolve"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule BuyerACLAuthorizePayment {
    description: "Enable a Buyer to AuthorizePayment for an Order"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.AuthorizePayment"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule BuyerACL {
    description: "Allow Buyer full access to any order where they are listed as Buyer"
    participant(m): "org.acme.Z2BTestNetwork.Buyer"
    operation: READ, CREATE, UPDATE, DELETE
    resource(v): "org.acme.Z2BTestNetwork.Order"
    condition: (v.buyer.buyerID == m.getIdentifier())
    action: ALLOW
}

/**
*
*/
rule netAccessBuyer {
  description: "Allow Buyers access to the network"
  participant: "org.acme.Z2BTestNetwork.Buyer"
  operation: READ, CREATE, UPDATE, DELETE
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

/**
*
**/
rule SellerOrderFromSupplier {
    description: "Enable a Seller to Submit an Order to a third party for fulfillment"
    participant(m): "org.acme.Z2BTestNetwork.Seller"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.OrderFromSupplier"
    condition: (v.seller.sellerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule SellerRequestPayment {
    description: "Enable a Seller to request payment for a fulfilled order"
    participant(m): "org.acme.Z2BTestNetwork.Seller"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.RequestPayment"
    condition: (v.seller.sellerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule SellerResolve {
    description: "Enable a Seller to resolve a dispute"
    participant(m): "org.acme.Z2BTestNetwork.Seller"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.Resolve"
    condition: (v.seller.sellerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule SellerRefund {
    description: "Enable a Seller to refund payment for a disputed order"
    participant(m): "org.acme.Z2BTestNetwork.Seller"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.**"
    transaction(tx): "org.acme.Z2BTestNetwork.Refund"
    condition: (v.seller.sellerID == m.getIdentifier())
    action: ALLOW
}

/**
*
**/
rule SellerACL {
    description: "Allow Seller full access to order where they are listed as seller and the order has been Submitted for Purchase"
    participant(m): "org.acme.Z2BTestNetwork.Seller"
    operation: READ, CREATE, UPDATE
    resource(v): "org.acme.Z2BTestNetwork.Order"
    condition: ((v.seller.sellerID == m.getIdentifier()) && (v.bought != ''))
    action: ALLOW
}

/**
*
*/
rule netAccessSeller {
  description: "Allow Sellers access to the network"
  participant: "org.acme.Z2BTestNetwork.Seller"
  operation: READ, CREATE, UPDATE, DELETE
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

/**
*
**/
rule FinanceCoACL {
    description: "Allow FinanceCo full access to all Orders"
    participant: "org.acme.Z2BTestNetwork.FinanceCo"
    operation: ALL
    resource: "org.acme.Z2BTestNetwork.*"
    action: ALLOW
}

Модель

namespace org.acme.Z2BTestNetwork
import composer.base.*
import composer.events.*

participant Buyer identified by buyerID extends Member{
    o String buyerID
}
participant Seller identified by sellerID extends Member{
    o String sellerID
}
participant Shipper identified by shipperID extends Member {
    o String shipperID
}
participant Provider identified by providerID extends Member {
    o String providerID
}
participant FinanceCo identified by financeCoID extends Member {
    o String financeCoID
}

asset Order identified by orderNumber {
    o String orderNumber
    o String[] items
    o String status
    o String dispute
    o String resolve
    o String backorder
    o String refund
    o Integer amount
    o String created
    o String bought
    o String cancelled
    o String ordered
    o String dateBackordered
    o String requestShipment
    o String delivered
    o String delivering
    o String disputeOpened
    o String disputeResolved
    o String paymentRequested
    o String orderRefunded
    o String approved
    o String paid
    --> Provider provider
    --> Shipper shipper
    --> Buyer buyer
    --> Seller seller 
    --> FinanceCo financeCo 

}
  transaction CreateOrder {
    o Integer amount
    --> Order order
    --> Buyer buyer
    --> Seller seller
    --> FinanceCo financeCo
}
  transaction OrderCancel {
    --> Order order
    --> Buyer buyer
    --> Seller seller
}
  transaction Buy {
    --> Order order
    --> Buyer buyer
    --> Seller seller
}
  transaction OrderFromSupplier {
    --> Order order
    --> Provider provider
    --> Seller seller
}
  transaction RequestShipping {
    --> Order order
    --> Shipper shipper
    --> Provider provider
}
  transaction Deliver {
    --> Order order
    --> Shipper shipper
}
  transaction Delivering {
    o String deliveryStatus
    --> Order order
    --> Shipper shipper
}
  transaction BackOrder {
    o String backorder
    --> Order order
    --> Provider provider
}
  transaction Dispute {
    o String dispute
    --> Order order
    --> Buyer buyer
    --> Seller seller
    --> FinanceCo financeCo
}
  transaction Resolve {
    o String resolve
    --> Order order
    --> Buyer buyer
    --> Seller seller
    --> Shipper shipper
    --> Provider provider
    --> FinanceCo financeCo
}
  transaction RequestPayment {
    --> Order order
    --> Seller seller
    --> FinanceCo financeCo
}
  transaction AuthorizePayment {
    --> Order order
    --> Buyer buyer
    --> FinanceCo financeCo
}
  transaction Pay {
    --> Order order
    --> Seller seller
    --> FinanceCo financeCo
}
  transaction Refund {
    o String refund
    --> Order order
    --> Seller seller
    --> FinanceCo financeCo
}

Исключение Stacktrace

Введен заказ от поставщика для abbykidfriendlyinccom1526916622207 входящий идентификатор: bob @ pchardwareinc.com с order.seller as: bob@pchardwareinc.com abbykidfriendlyinccom1526916622207 submitTransaction для обновления статуса заказа от поставщика не удалось с текстом: Ошибка при попытке вызвать бизнес-сеть.Ошибка: нет действительных ответов от любых пиров.Ответ от попытки одноранговых коммуникаций был ошибкой: Ошибка: 2 НЕИЗВЕСТНО: ошибка при выполнении цепного кода: транзакция возвращена с ошибкой: AccessException: участник 'org.acme.Z2BTestNetwork.Seller#bob@pchardwareinc.com' не имеет доступа 'CREATE' к ресурсу'org.acme.Z2BTestNetwork.OrderFromSupplier # 751d9ec9d134be96cef201e495331f73aba55d004550c9b3d89bfc9f5cc225e5'

1 Ответ

0 голосов
/ 22 мая 2018

ошибка говорит о том, что вы упустили правило - чтобы позволить этим участникам использовать класс транзакции (ресурс) - предложить что-то вроде этого - подняться выше в списке разделов правил - (не уверен, что ваши комментарии отражают это дополнение илиnot)

rule netAccessSellerTxnOrderFromSupplier {
description: "Allow Sellers run transaction"
participant: "org.acme.Z2BTestNetwork.Seller"
operation: READ, CREATE
resource: "org.acme.Z2BTestNetwork.OrderFromSupplier"
action: ALLOW
}

, поэтому участник имеет полномочия для выполнения этого типа транзакции (ресурс выше).

...