Разрешить участнику полный доступ для чтения - PullRequest
0 голосов
/ 04 мая 2018

Я хотел бы предоставить доступ на чтение всем участникам «Персона», работающим в компании, в которой тип компании «ГРАНИЦА». Тип компании - enum.

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
}

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 transaction {
    description: "Allow participants full access to transactions"
    participant: "org.acme.shipping.participants.Person"
    operation: ALL
    resource: "org.acme.shipping.transactions.**"
    action: ALLOW
}

rule containers {
    description: "Allow participants access to containers owned by their company"
    participant(p): "org.acme.shipping.participants.Person"
    operation: ALL
    resource(c): "org.acme.shipping.assets.**"
    condition: (c.owner.getIdentifier() == p.company.getIdentifier())
    action: ALLOW
}

rule border {
    description: "Allow Border access to containers"
    participant(p): "org.acme.shipping.participants.Person"
    operation: READ
    resource: "org.acme.shipping.assets.**"
    condition: (p.company.type == "BORDER")
    action: ALLOW
}

Файл модели участника:

namespace org.acme.shipping.participants

participant Company identified by cid {
  o String cid
  o String name
  o CompanyType type
}

enum CompanyType {
  o BORDER
  o COURIER
  o SHIPPER
}

participant Person identified by id {
  o String id
  o String name
  --> Company company
}

Однако Лицо по-прежнему не может видеть какие-либо активы.

Любые предложения, как это можно решить?

1 Ответ

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

Нет проблем с правилом ACL, которое вы написали для предоставления доступа ко всем контейнерам для пограничных компаний. Основная проблема заключается в том, что каждый участник Person имеет ссылку на свою Company , но для участника типа Person не определено правило доступа / чтения своей компании. подробности в ACL. Поэтому по умолчанию ACL запрещает доступ READ для Лица, чтобы ПРОЧИТАТЬ данные своей компании, и когда вы обращаетесь к компании лица в условии правила как

p.company.type

доступ просто ограничен. Для достижения той же функциональности вы должны сначала предоставить READ доступ к собственной компании лица, используя

rule readCompany {
    description: "Allow Read Access to Person's Own Company"
    participant(p): "org.acme.shipping.participants.Person"
    operation: READ
    resource(comp): "org.acme.shipping.participants.Company"
    condition: (p.company.getIdentifier() == comp.getIdentifier())
    action: ALLOW
}

Тогда вы сможете предоставить доступ ко всем контейнерам лицам , принадлежащим компании типа Граница , используя то же правило, что и

rule border {
    description: "Allow Border access to containers"
    participant(p): "org.acme.shipping.participants.Person"
    operation: READ
    resource: "org.acme.shipping.assets.**"
    condition: (p.company.type == "BORDER")
    action: ALLOW
}
...