在Hyperledger作曲器中定义访问控制规则时遇到问题。假设我在命名空间asset1
中有一个资源(资产)asset2
和p1
和一个参与者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
引用p1
和asset1
。但是,在我的模型中asset1
和asset2
之间存在1:1的关系。但是我不想在第一个资产模型定义(--> asset2 asset2
中引用第二个资产,因为到创建asset1
实例(执行"$class":"org.hyperledger.composer.system.AddAsset"
)时,{{1 }}实例可能还不存在。
我的目标是为asset2
上的p1
READ
实例提供访问权限{em> 仅在asset1
中声明该实例并使用相应的asset2
。
对于一个解决方案,我正在考虑将asset1
(asset1
)中的引用设为可选,并避免使用内置资产创建功能(--> 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
}
中声明查询?
谢谢你们帮助我:)