[Hyperledger-Composer] Попытка получить владельца свойства для InvalidRelationship не разрешена — проблема со списком контроля доступа

Я получаю следующую ошибку, играя с Hyperledger Composer.

{
  "$class": "org.property.registration.purchaseProperty",
  "propertyListing":
  "resource:org.property.registration.PropertyListing#PL001"
}

Ошибка: попытка получить владельца свойства для InvalidRelationship не разрешена. InvalidRelationship, созданный из-за того, что объект с идентификатором «1003» в коллекции с идентификатором «Актив: org.property.registration.Property» не существует; [cause=У участника «org.property.registration.User#0001» нет доступа «ЧТЕНИЕ» к ресурсу «org.property.registration.Property#1003»]

Я пытаюсь получить доступ к свойству актива, которое является частью списка свойств другого актива.

asset Property identified by PID {
  o String PID
  o Integer marketPrice
  o DateTime regDate
  o String propertyType
  o String location
  o String status default= "Registered"
  --> User owner
} 
asset PropertyListing identified by PLID {
  o String PLID
  --> Property property
}

Я пытаюсь получить доступ к активу PropertyListing и изменить статус актива собственности внутри него. (Я хочу приобрести недвижимость в списке недвижимости, размещенном другим пользователем)

const registry = await getAssetRegistry(tx.propertyListing.property.getFullyQualifiedType());
    await registry.update(tx.propertyListing.property);
 // Remove the property from propertyListing()
    const registry2 =  await getAssetRegistry(tx.propertyListing.getFullyQualifiedType());
    await registry2.remove(tx.propertyListing); 

Я надеюсь, что, судя по сообщению об ошибке, это похоже на проблему с разрешением, которая не позволяет мне приобрести публикацию о собственности другим пользователем.

// User can see all properties listed for sale
rule UserAccessAllSaleProperties {
    description: "Allow Users to access all properties listed for sale"
    participant: "org.property.registration.User"
    operation: ALL
    resource: "org.property.registration.PropertyListing"
    action: ALLOW
}

Здесь я хочу получить доступ к свойству, которое является частью PropertyListing. Я пытаюсь найти, какой короткий список ACL я могу использовать. Все еще пытаюсь.

Ребята, ваши предложения приветствуются!!!


person Sanjaya Panigrahi    schedule 15.09.2019    source источник


Ответы (1)


Пытаться,

rule UserAccessAllSaleProperties {
    description: "Allow Users to access all properties listed for sale"
    participant: "org.property.registration.**"
    operation: READ
    resource: "org.property.registration.PropertyListing"
    action: ALLOW
}

Это позволит всем участникам только «ПРОЧИТАТЬ» актив PropertyListing, который лучше подходит для вашего приложения. Будет полезно, если вы представите будущих участников. (Предположим, что пользователь определен как участник, а не актив).

Я бы также рекомендовал разделить файлы участников и активов, поскольку у вас большое приложение. как

org.property.registration.Property (-> Will only contain Assets)
org.property.registration.Participants (-> Will only contain Participants)

И импортировать их друг в друга.

так что ваше правило будет как

rule UserAccessAllSaleProperties {
    description: "Allow Users to access all properties listed for sale"
    participant: "org.property.registration.Participants.**"
    operation: READ
    resource: "org.property.registration.PropertyListing"
    action: ALLOW
}
person Chromeium    schedule 23.09.2019
comment
Спасибо за ваш ответ. Я изменил ACL, и он почти такой же, как вы упомянули, и он работает для меня. - person Sanjaya Panigrahi; 30.09.2019