这个方式适合业务人员/开发人员快速测试开发业务网络,它提供图形化界面操作,可以直观的操作资产/参与者以及提交交易。安装这个环境很简单。如果要部署到正式环境,请先导出.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
后,需要参考方式一。