這篇文章主要為大家展示了“Hyperledger composer訪問控制語言怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Hyperledger composer訪問控制語言怎么用”這篇文章吧。
創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為渝中等服務(wù)建站,渝中等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為渝中企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
Hyperledger Composer包含訪問控制語言(ACL),它提供對(duì)域模型元素的聲明式訪問控制。通過定義ACL規(guī)則,您可以確定允許哪些用戶/角色在業(yè)務(wù)網(wǎng)絡(luò)的域模型中創(chuàng)建,讀取,更新或刪除元素。
1、授予網(wǎng)絡(luò)訪問控制權(quán)
使用系統(tǒng)命名空間授予網(wǎng)絡(luò)訪問權(quán)限。系統(tǒng)名稱空間始終org.hyperledger.composer.system.Network
用于網(wǎng)絡(luò)訪問和org.hyperledger.composer.system
所有訪問。以下訪問控制規(guī)則為NetworkControl參與者授予對(duì)網(wǎng)絡(luò)命令使用所有操作的權(quán)限。
rule NetworkControlPermission { description: "NetworkControl can access network commands" participant: "org.example.basic.NetworkControl" operation: ALL resource: "org.hyperledger.composer.system.Network" action: ALLOW }
以下訪問控制規(guī)則將允許所有參與者訪問業(yè)務(wù)網(wǎng)絡(luò)中的所有操作和命令,包括網(wǎng)絡(luò)訪問和業(yè)務(wù)訪問。
rule AllAccess { description: "AllAccess - grant everything to everybody" participant: "org.hyperledger.composer.system.Participant" operation: ALL resource: "org.hyperledger.composer.system.**" action: ALLOW }
2、訪問控制規(guī)則的評(píng)估
業(yè)務(wù)網(wǎng)絡(luò)的訪問控制由一組有序的ACL規(guī)則來定義。規(guī)則按順序進(jìn)行評(píng)估,條件匹配的第一條規(guī)則決定訪問是被授予還是拒絕。如果沒有規(guī)則匹配,則訪問被拒絕。
ACL規(guī)則是在permissions.acl
業(yè)務(wù)網(wǎng)絡(luò)的根目錄中調(diào)用的文件中定義的。如果該業(yè)務(wù)網(wǎng)絡(luò)中缺少該文件,則允許所有訪問。
3、訪問控制規(guī)則語法
有兩種類型的ACL規(guī)則:簡(jiǎn)單ACL規(guī)則和條件ACL規(guī)則。簡(jiǎn)單規(guī)則用于控制參與者類型或參與者實(shí)例對(duì)名稱空間或資產(chǎn)的訪問。例如,下面的規(guī)則指出任何org.example.SampleParticipant
類型的實(shí)例都可以對(duì)所有實(shí)例執(zhí)行所有操作org.example.SampleAsset
。
rule SimpleRule { description: "Description of the ACL rule" participant: "org.example.SampleParticipant" operation: ALL resource: "org.example.SampleAsset" action: ALLOW }
有條件的ACL規(guī)則為參與者和被訪問的資源引入變量綁定,以及布爾型JavaScript表達(dá)式,如果為true,則參與者可以允許或拒絕資源訪問。例如,下面的規(guī)則指出,任何org.example.SampleParticipant
類型的實(shí)例都可以在org.example.SampleAsset
IF的所有實(shí)例上執(zhí)行ALL操作,參與者是資產(chǎn)的所有者。
rule SampleConditionalRule { description: "Description of the ACL rule" participant(m): "org.example.SampleParticipant" operation: ALL resource(v): "org.example.SampleAsset" condition: (v.owner.getIdentifier() == m.getIdentifier()) action: ALLOW }
有條件的ACL規(guī)則也可以指定一個(gè)可選的事務(wù)子句。當(dāng)指定事務(wù)子句時(shí),如果參與者提交了事務(wù),并且該事務(wù)是指定類型,則ACL規(guī)則僅允許參與者訪問資源。例如,下面的規(guī)則指出,任何org.example.SampleParticipant
類型的實(shí)例都可以對(duì)org.example.SampleAsset
IF的所有實(shí)例執(zhí)行ALL操作,參與者是資產(chǎn)的所有者,并且參與者提交了該org.example.SampleTransaction
類型的事務(wù)以執(zhí)行操作。
rule SampleConditionalRuleWithTransaction { description: "Description of the ACL rule" participant(m): "org.example.SampleParticipant" operation: READ, CREATE, UPDATE resource(v): "org.example.SampleAsset" transaction(tx): "org.example.SampleTransaction" condition: (v.owner.getIdentifier() == m.getIdentifier()) action: ALLOW }
可以定義多個(gè)ACL規(guī)則,從概念上定義決策表。決策樹的行為定義訪問控制決策(ALLOW或DENY)。如果決策表無法匹配,默認(rèn)情況下,訪問被拒絕。
資源定義了ACL規(guī)則適用的內(nèi)容。這可以是一個(gè)類,名稱空間內(nèi)的所有類或名稱空間下的所有類。它也可以是一個(gè)類的實(shí)例。
資源示例:
命名空間:org.example。*
命名空間(遞歸):org.example。**
命名空間中的類:org.example.Car
類的實(shí)例:org.example.Car#ABC123
操作標(biāo)識(shí)規(guī)則管理的操作。支持四種操作:CREATE,READ,UPDATE和DELETE。您可以使用ALL指定規(guī)則管理所有支持的操作。或者,您可以使用逗號(hào)分隔列表來指定規(guī)則管理一組支持的操作。
參與者定義已提交交易進(jìn)行處理的個(gè)人或?qū)嶓w。如果指定了參與者,他們必須存在于參與者注冊(cè)表中。PARTICIPANT可以選擇性地綁定到一個(gè)變量以用于PREDICATE。特殊值“ANY”可以用來表示參與者類型檢查沒有針對(duì)規(guī)則執(zhí)行。
事務(wù)定義了參與者為了對(duì)指定資源執(zhí)行指定操作而必須提交的事務(wù)。如果指定了此子句,并且參與者未提交此類型的事務(wù) - 例如,他們正在使用CRUD API - 則ACL規(guī)則不允許訪問。
條件是綁定變量上的布爾型JavaScript表達(dá)式。任何在表達(dá)式中合法的JavaScript表達(dá)式都if(...)
可以在這里使用。用于ACL規(guī)則條件的JavaScript表達(dá)式可以引用腳本文件中的JavaScript實(shí)用程序函數(shù)。這允許用戶輕松實(shí)現(xiàn)復(fù)雜的訪問控制邏輯,并在多個(gè)ACL規(guī)則中重復(fù)使用相同的訪問控制邏輯功能。
行動(dòng)確定規(guī)則的行為。它必須是:允許,拒絕。
4、舉例
示例ACL規(guī)則(按評(píng)估順序):
rule R1 { description: "Fred can DELETE the car ABC123" participant: "org.example.Driver#Fred" operation: DELETE resource: "org.example.Car#ABC123" action: ALLOW } rule R2 { description: "regulator with ID Bill can not update a Car if they own it" participant(r): "org.example.Regulator#Bill" operation: UPDATE resource(c): "org.example.Car" condition: (c.owner == r) action: DENY } rule R3 { description: "regulators can perform all operations on Cars" participant: "org.example.Regulator" operation: ALL resource: "org.example.Car" action: ALLOW } rule R4 { description: "Everyone can read all resources in the org.example namespace" participant: "ANY" operation: READ resource: "org.example.*" action: ALLOW } rule R5 { description: "Everyone can read all resources under the org.example namespace" participant: "ANY" operation: READ resource: "org.example.**" action: ALLOW }
規(guī)則從頂部(最具體)到底部(最不具體)進(jìn)行評(píng)估。一旦參與者,操作和資源匹配規(guī)則,則不評(píng)估后續(xù)規(guī)則。
這種排序使決策表更快地掃描人類和計(jì)算機(jī)。如果沒有ACL規(guī)則觸發(fā),則訪問控制決策是拒絕。
以上是“Hyperledger composer訪問控制語言怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!