Контроль доступа Hyperledger Composer - PullRequest
0 голосов
/ 03 сентября 2018

В моей сети соответствующая часть модели выглядит следующим образом.

asset Farm identified by farmId{
   o String farmId
   o String FarmLocation
   o String[] images optional 
   o String[] waterSources
   o String[] nearFactories
   o String otherDescription optional
   o Certification certification 
   --> Stakeholder owner
   o String[] farmers 
 }
 
 participant Stakeholder identified by stakeholderId{
  o String stakeholderId
  o String name
  o Address address
  o String email optional 
  o String telephone optional
  o Certification certification optional 
  o String[] images optional
  o Company company
  o String username
  o String password 
  o StakeholderType type
  o String description optional 
  o String authPerson 
  o String vehicleNo optional
  o DistType distributionType optional
  o String branchNo optional 
}

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

rule FarmersHasAccessToTheirFarms {
    description: "Allow all participants full access to their assets"
    participant(p): "org.ucsc.agriblockchain.Stakeholder"
    operation: ALL
    resource(r): "org.ucsc.agriblockchain.Farm"
    condition: (p.type == "FARMER" && p.stakeholderId in r.farmers)
    action: ALLOW
}

Как выполнить это требование? Есть предложения?

1 Ответ

0 голосов
/ 03 сентября 2018

вы можете использовать функцию .some - кто-то уже разместил здесь ответ -> Включает функцию в условии ACL , которая аналогична той, которую вы хотите достичь.

например что-то вроде

condition: (p.type == "FARMER" && (r.farmers.some(function (checkstake) {
        return checkstake === p.stakeholderId;  
    } ))
...