IBM教程
其实官方给了挺多文件的恩……
IBM上面的教程:
https://www.ibm.com/developerworks/cn/cloud/library/cl-deploy-interact-extend-local-blockchain-network-with-hyperledger-composer/index.html
composer上面的教程:
https://hyperledger.github.io/composer/latest/tutorials/tutorials
https://hyperledger.github.io/composer/latest/tutorials/acl-trading.html
顺便师姐让我找网上的例子,跑起来后再修改它之类的。
那我在网上试着找了一些。
https://github.com/search?q=fabric+composer
先罗列在这吧。
前言
participant不可能能够获取所有的资源,也不能在应用中采取任何行动。
ACL在business network application中实现的两种方法:
(1)编程
access control变为交易的一部分,用一些if语句和switch语句来处理。有权限才能够执行某些操作、交易等。
(2)declarative
在ACL文件中用ACL语言定义规则。如果这个唯一的文档permitions.acl文档消失了的话,那所有的操作都能进行。
ACL简单规则
能够控制participant能否访问namespace、asset或者asset的某项属性。
ACL conditional 规则
在运行时计算的boolean javascript表达式,允许或拒绝参与者对资源的访问。
规则的基本
一个规则涉及Asset、participant、operations、transaction(optional)、 condition(这个在制定conditional rule时需要)。
ACL有点点像json。
rule Name-of-rule{
description: "说明"
resource: ”完全合格的资源规范"
participant:“完全合格的参与者规范”
operation: ALL *或者* 逗号分开的CRUD操作
action: ALLOW *或者* DENY
}
复杂的ACL可能有transaction作为最后的条件
resource
可以是具体的class名字,也可以是具体的一个实例,可以使用通配符*,指代这个namespace中的所有资源。。
例如
org.acme.airline.Aircraft
org.acme.airline.aircraft#CRAFT01
org.acme.airline.*
你可以通过使用本质上递归的双星号来进一步发展。 换句话说,包括org.acme.airline下的资源以及org.acme.airline的任何其他命名空间扩展也将包含在内。
org.acme.airline.**
需要注意的是
不仅有用户自定义的namespace,还有system namespace。composer cli tool就在这个namespace中有定义。
如果需要对所有的system namespace有一个规则,应写
org.hyperledger.composer.system.**
participant
规则可以针对一个participant实现。
如果对所有participant都有效,那么关键词是:ANY
如果要这个network application的管理员制定规则,那么需要使用的是
org.hyperledger.composer.system.NetworkAdmin
其他participant路径啥的和resource差不多。
operations
这里指代的是CRUD操作。
CREATE READ UPDATE DELETE
ALL
action
allow or deny
应该是说这个规则是陈述还是否定吧,我觉得=-=。
transaction access
通过transaction公开资源的CRUD操作。
提供对事务的权限访问。
如果在ACL中加上了交易的这个函数,那么participant只能通过调用这个交易对asset进行操作,无法直接对asset进行操作。
这就是transaction限制加上后的结果。
condition
它的工作方式是在条件元素中提供表达式,在运行时将对表达式进行评估,并根据表达式求值的结果,允许或拒绝访问。
对执行上下文的符号访问,即可以将符号与规则中的各种元素相关联。
支持复杂的conditions
方法是在js文件中定义一个工具函数,并在condition这项里面调用这个函数。
运行时规则的流程
(1)ACL文件是否存在。
(2)不存在则默认操作,存在则按顺序执行ACL中的规则。
(3)第一个匹配到的规则如果符合了,就判断它的action是执行还是拒绝。
(4)按顺序寻找下一个匹配的规则。
(5)所有规则都匹配并且allow,则执行