这个方式适合业务人员/开发人员快速测试开发业务网络,它提供图形化界面操作,可以直观的操作资产/参与者以及提交交易。安装这个环境很简单。如果要部署到正式环境,请先导出.bna文件,然后参考方式一中的部署到区块链上的操作。我的操作系统是ubuntu16.04。
Docker Engine >= 17.03
Docker Compose >= 1.8
注意: 先关闭其他fabric网络,防止冲突。
选择一个安装目录执行面命令:
curl -sSL https://hyperledger.github.io/composer/install-hlfv1.sh | bash
// 在当前目录下 会多出一个composer-data文件夹,一个composer.sh脚本
.
├── composer-data
├── composer.sh
└── ......
它会自动执行:
最终执行完毕后,会跳转到http://localhost:8080/editor界面
开启composer:
./composer
关闭composer:
./composer stop
它会部署到自带的fabric测试网络上。
我们使用composer playground自带的basic-sample-network来演示。这个业务网络定义了:SampleParticipant 参与者,SampleAsset 资产,SampleTransaction 交易,SampleEvent 事件。创建资产,参与者是通过点击右侧+create 按钮,输入json格式化数据,然后提交即可。
创建两个参与者,id分别为A和B
{
"$class": "org.acme.sample.SampleParticipant",
"participantId": "A",
"firstName": "zhang",
"lastName": "san" } {
"$class": "org.acme.sample.SampleParticipant",
"participantId": "B",
"firstName": "li",
"lastName": "si" } 结果:
创建一个归属于A的资产
{
"$class": "org.acme.sample.SampleAsset",
"assetId": "1",
"owner": "resource:org.acme.sample.SampleParticipant#A",
"value": "" } 结果:
修改资产值( 执行事务)
{
"$class": "org.acme.sample.SampleTransaction",
"asset": "resource:org.acme.sample.SampleAsset#1",
"newValue": "1000" } 执行完毕后 再次查看SampleAsset:
查看权限定义规则
permissions.acl
/** * Sample access control list. */
//任何人都有读取权限
rule EverybodyCanReadEverything {
description: "Allow all participants read access to all resources"
participant: "org.acme.sample.SampleParticipant"
operation: READ
resource: "org.acme.sample.*"
action: ALLOW
}
//任何人都可以提交交易
rule EverybodyCanSubmitTransactions {
description: "Allow all participants to submit transactions"
participant: "org.acme.sample.SampleParticipant"
operation: CREATE
resource: "org.acme.sample.SampleTransaction"
action: ALLOW
}
//只有资产的拥有者才可以进行所有操作(增删改查),当然了 其他人是可以读取查看的(第一个权限规则)
rule OwnerHasFullAccessToTheirAssets {
description: "Allow all participants full access to their assets"
participant(p): "org.acme.sample.SampleParticipant"
operation: ALL
resource(r): "org.acme.sample.SampleAsset"
condition: (r.owner.getIdentifier() === p.getIdentifier())
action: ALLOW
}
// 系统权限:CRUD 如 PeerAdmin , Admin
rule SystemACL {
description: "System ACL to permit all access"
participant: "org.hyperledger.composer.system.Participant"
operation: ALL
resource: "org.hyperledger.composer.system.**"
action: ALLOW
} 上一个步骤是在PeerAdmin身份下执行的所有的操作,我们需要为两个参与者颁发身份。注意:只有admin才有颁发身份的权限。
颁发身份
点击右上角PeerAdmin ,切换到admin身份,点击右侧Issue New ID
按照上面步骤再添加 b,最后效果如下:
测试不同身份
根据permissions.acl中的定义规则,对于id为1的资产,只有拥有者才能执行全部操作,其他人只能查看。 切换到b身份,我们来修改下资产value ,查看效果:
提示错误:
Error: Error trying invoke chaincode. Error: chaincode error (status: 500, message: Error: Participant 'org.acme.sample.SampleParticipant#B' does not have 'UPDATE' access to resource 'org.acme.sample.SampleAsset#1') 很明显b身份 没有修改这个资产的权限,和定义的权限规则一致。相似的你可以测试其他几个权限规则,你页可以修改规则,重新部署来测试。
导出bna后,需要参考方式一。