我在超级账本编辑器中编码了一种文章提交系统,该系统基本上应允许“作者”类型的参与者创建“文章”资产,该资产应由评论者进行审查(另一个“作者”属性isReview = true)。
问题是,遵循ACL的逻辑,作者可以更改其数据,并且该属性包括确定他们是否为审阅者的属性。不允许这样做,因为作者只有在成功发表文章后才成为审稿人。
我的问题是我是否需要在hyperledger的javascript逻辑中进行某种方式的限制,或者是否可以在客户端应用程序中对其进行屏蔽(如果可以在客户端上完成),黑客是否可以利用此“空白” “?
我知道我可以在客户端应用程序中执行此操作,但是我不知道这种方法的含义,因为由于安全问题,系统应该全部在后端工作。
.cto
participant Author identified by email {
o String authorId optional
o String email
o String firstName
o String lastName
o Boolean isReviewer default=false
o Double points default=0.0
o Double reputation default=0.0
}
.acl
rule AuthorCanUpdateData {
description: "Allow all author access to all resources"
participant(m): "org.dasp.net.Author"
operation: ALL
resource(v): "org.dasp.net.Author"
condition: (v.getIdentifier() == m.getIdentifier())
action: ALLOW
}
我希望能够确定参与者可以更改或不更改哪些功能。但我没有发现任何这些,只是读取,更新,创建并全部
答案 0 :(得分:0)
Hyperledger Composer没有“属性级别”授权控制,它主要控制哪些参与者对业务网络中哪些资源(类,实例等)具有限制。
所以-对于所提出的问题:如果需要属性级别控制(并且'作者'正在通过客户端应用程序访问业务网络)-是的,您应该实现客户端。常见的安全体系结构问题在这里适用(对不起,我不能帮助您哪些人可以从客户端访问您的业务网络,组织/对等方需要批准哪些交易等)。
关于业务网络中的限制,简而言之,问题似乎是:“我可以阻止未出版的作者专门更改其isReviewer
状态吗?”
是的,您可以通过在这种情况下维护单独的状态资产清单来进行限制:
participant Author identified by email {
o String email
o String authorId optional
o String firstName
o String lastName
o Double points default=0.0
o Double reputation default=0.0
}
asset Authorship identified by authorId {
o String authorId
o Boolean isReviewer default=false
}
然后,当您在资源级别上工作时,您的ACL(如果存在)将起作用(“作者可以编辑自己的个人资料”),客户可以检查审阅者状态(如果这是当前正在执行的操作,即是否有人有权审核)。