Hyperledger Composer访问控制规则,其条件取决于另一个资源

时间:2019-01-15 12:26:41

标签: hyperledger hyperledger-composer access-control

在Hyperledger作曲器中定义访问控制规则时遇到问题。假设我在命名空间asset1中有一个资源(资产)asset2p1和一个参与者org.example。示例模型文件(.cto):

namespace org.example

participant p1 identified by p1Id 
    {
    o String p1Id
    o String name
    }

asset asset1 identified by asset1Id
    {
    o String asset1Id
    o String name
    }

asset asset2 identified by asset2Id
    {
    o String asset2Id
    o String name
    --> p1
    --> asset1 asset1
    }

您会看到asset2引用p1asset1。但是,在我的模型中asset1asset2之间存在1:1的关系。但是我不想在第一个资产模型定义(--> asset2 asset2中引用第二个资产,因为到创建asset1实例(执行"$class":"org.hyperledger.composer.system.AddAsset")时,{{1 }}实例可能还不存在。

我的目标是为asset2上的p1 READ实例提供访问权限{em> 仅在asset1中声明该实例并使用相应的asset2

对于一个解决方案,我正在考虑将asset1asset1)中的引用设为可选,并避免使用内置资产创建功能(--> asset2 asset2 optional)。因此,因此在"org.hyperledger.composer.system.AddAsset"文件中实现了自定义事务(AddAssetAsset2),该文件将更新相应asset1实例中的可选asset2引用。但是我想使用内置函数,就像可以在logic.js中轻松调用它一样。

因此,我现在问是否有任何解决方案来声明composer-playground文件中的READ实例的特殊p1访问权限? 这种情况与此stack-overflow question有点不同。

尤其是在规则条件下是否可以使用其他资源?例如:

.acl

是否有这样的解决方案,还是我必须以其他方式解决?例如。使用javascript实用程序函数并在rule P1ReadAsset1Rule { description: "P1 can read the asset1 if p1 is defined in the asset2" participant(p): "org.example.p1" operation: READ resource(r): "org.example.asset1" condition: (org.example.asset2.p1.getIdentifier() == p.getIdentifier() && org.example.asset2.asset1.getIdentifier() == r.getIdentifier()) action: ALLOW } 中声明查询?

谢谢你们帮助我:)

0 个答案:

没有答案