如果我有1个组织orgA
,并且在这个组织下我有2个用户:user1
和user2
,则orgA
中也有1个对等方,我们称之为peer0
。
现在想象一下,user1
的证书位于orgA's
msp/admincerts
的伪造中,这使得user1
成为orgA
的管理员。另一方面,假设user2's
证书位于peer0's
msp/admincerts
文件夹中,这使得user2
成为peer0
的管理员。
我的问题是user1
和user2
之间的特权有什么区别,我的意思是user1
可以做什么,user2
不能做什么,反之亦然?
我还使用fabic ca
和node sdk
与网络进行交互。在我的示例中,当我从nod sdk注册fabric ca的引导用户(admin / adminpw),然后发出创建频道请求时,它起作用了,但是当我发出加入频道请求时,它失败了(因为该用户没有特权)。当我试图了解为什么会发生这种情况时,我发现如果我从证书用户发出的加入请求不在对等方的msp / admincerts文件夹中,则该用户没有权限使对等方加入频道。因此,唯一的方法是我必须将已注册管理员的证书复制到peer0的msp / admincerts文件夹中,然后我认为它将起作用,但这是使其生效的唯一方法,还是有其他避免复制/粘贴的方法?来自sdk,还是创建新的配置更新交易?
我也不明白是什么使该用户能够创建频道? fabric ca
的引导用户具有什么权限?
答案 0 :(得分:0)
这是一个很晚的回复,但希望有人会觉得这很有帮助。用户角色和权限没有直接关联,这是通过configtx.yaml
中设置的策略来完成的。
为每个组织和订购者定义策略,将每个成员和管理员标记为一组特定的策略子组,例如Readers
或Writers
或Admins
。这些是基层用于构造ImplicitMeta策略(例如用于chiancode查询和写入)的策略。
例如,一个组织定义了类似的策略
# Policies defines the set of policies at this level of the config tree
# For organization policies, their canonical path is usually
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
Policies: &org1Policies
Readers:
Type: Signature
Rule: "OR('org1.example.com.member')"
# If your MSP is configured with the new NodeOUs, you might
# want to use a more specific rule like the following:
# Rule: "OR('org1MSP.admin', 'org1MSP.peer')"
Writers:
Type: Signature
Rule: "OR('org1.example.com.member')"
# If your MSP is configured with the new NodeOUs, you might
# want to use a more specific rule like the following:
# Rule: "OR('org1MSP.admin', 'org1MSP.client'')"
Admins:
Type: Signature
Rule: "OR('org1.example.com.admin')
联盟的政策定义如下:
Policies:
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
这引用了先前定义的组织和订购者策略。
现在系统链码中可以具有以下策略:
Application: &ApplicationDefaults
ACLs: &ACLsDefault
#This section provides defaults for policies for various resources
#in the system.
#---Query System Chaincode (qscc) function to policy mapping for access control---#
#ACL policy for qscc's "GetChainInfo" function
qscc/GetChainInfo: /Channel/Application/Readers
#ACL policy for qscc's "GetBlockByNumber" function
qscc/GetBlockByNumber: /Channel/Application/Readers
这里引用的策略指向联盟策略。
有关详细说明,请阅读docs。