【composer开发】ACL语言

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,则执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值