细粒度访问控制的库函数
库软件包为资源、组和 ACL 以及全局功能提供了以下功能。
全局函数
| 函数 | 说明 |
|---|---|
| 初始化(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(错误) |
当链代码实例化时,将调用初始化函数。该函数将使用一些内置的访问控制列表初始化世界状态。这些内置列表用于引导环境。因此,需要对谁可以创建资源、组和 ACL 进行访问控制。如果标识为 nil,则使用调用者的标识。 完成引导后,将创建以下实体:
|
| NewGroupManager(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(*GroupManager,错误) |
获取用于所有组相关操作的组管理器。 Identity(身份):相关操作的默认身份。如果是 nil,则使用来电者的身份。 |
| NewACLManager(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(*ACLManager,错误) |
获取用于所有 ACL 相关操作的 ACL 管理器。 Identity(身份):相关操作的默认身份。如果是 nil,则使用来电者的身份。 |
| NewResourceManager(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(*ResourceManager,错误) |
获取用于所有资源相关操作的资源管理器。 Identity(身份):相关操作的默认身份。如果是 nil,则使用来电者的身份。 |
访问控制表 (Access Control List,ACL) 函数
ACL 结构的定义:type ACL struct {
Name string
Description string
Accesses []string // CREATE, READ, UPDATE, and DELETE, or whatever the end-user defined
Patterns []string // identities
Allowed bool // true means allows access.
BindACLs []string // The list of ACL , control who can call the APIs of this struct
}
- 访问: Accesses 字符串是逗号分隔的任意访问名称的列表,完全可以访问应用程序(CREATE、READ、UPDATE 和 DELETE 除外)。这些访问值用于维护细粒度的访问控制。应用程序可以使用自己的访问字符串(例如
"register"、"invoke"或"query"),甚至可以使用访问字段名称(例如"owner"、"quantity"等)等。 - 允许:允许确定匹配模式的身份是允许访问 (true) 还是禁止访问 (false)。您可能有一个访问控制列表,该列表指示 Bob 可以访问 "
CREATE",另一个列表指示"CREATE"禁止使用 Oracle 组(其中 Bob 是其成员)。Bob 是否具有访问权限取决于与相关实体关联的访问控制列表的顺序。 - BindACLs:BindACLs 参数将构成初始访问控制列表。
ACL 函数:
| 函数 | 说明 |
|---|---|
| Create(ACL ACL,标识 *x509)。证书(错误) |
创建新的 ACL。不允许有重复的命名 ACL。 要创建新的 ACL,身份需要具有对名为 “ 的引导资源的 CREATE 访问权限。ACL”。如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| Get(aclName 字符串,标识 *x509)。证书(ACL,错误) |
获取命名的 ACL。 身份必须具有对指定 ACL 的 READ 访问权限。如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| Delete(aclName 字符串,标识 *x509)。证书(错误) |
删除指定的 ACL。 身份必须具有对指定 ACL 的 DELETE 访问权限。如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| Update(ACL ACL,标识 *x509)。证书(错误) |
更新 ACL。 身份必须具有对指定资源的 UPDATE 访问权限,并且指定的 ACL 必须存在。如果 identity 为 nil,则使用 NewACLManager() 中指定的缺省标识。 |
| AddPattern(aclName 字符串,模式字符串,身份 *x509)。证书(错误) |
向指定的 ACL 添加新的身份模式。身份必须具有对指定 ACL 的 UPDATE 访问权限。 如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| RemovePattern(aclName 字符串,模式字符串,身份 *X509Certificate)(错误) |
从 ACL 中删除标识模式。身份必须具有对指定 ACL 的 UPDATE 访问权限。 如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| AddAccess(aclname string,access string,identity *X509Certificate)(错误) |
添加对指定 ACL 的新访问权限。身份必须具有对指定 ACL 的 UPDATE 访问权限。 如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| RemoveAccess(aclName 字符串,访问字符串,身份 *X509Certificate)(错误) |
从 ACL 中删除访问权限。身份必须具有对指定 ACL 的 UPDATE 访问权限。 如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| UpdateDescription(aclName string,newDescription string,identity *X509Certificate)(错误) |
更新说明。 身份必须具有对指定 ACL 的 UPDATE 访问权限。如果 identity 为 nil,则使用 newACLManager() 中指定的缺省标识。 |
| AddBeforeACL(aclName string,beforeName string,newBindACL string,identity *X509Certificate)(错误) |
在现有命名的 ACL 之前添加绑定 ACL。如果指定的 ACL 为空或未找到,则会将 ACL 添加到绑定 ACL 列表的开头。 身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的默认标识。 |
| AddAfterACL(aclName string,afterName string,newBindACL string,identity *X509Certificate)(错误) |
在现有命名的 ACL 之后添加绑定 ACL。如果指定的 ACL 为空或未找到,则会将 ACL 添加到绑定 ACL 列表的末尾。 身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的默认标识。 |
| RemoveBindACL(aclName string,removeName string,identity *X509Certificate)(错误) |
从绑定 ACL 列表中删除 removeName ACL。 身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的默认标识。 |
| GetAll(身份 *x509)。证书([]ACL,错误) |
获取所有 ACL。 身份必须具有对指定 ACL 的 READ 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的默认标识。 |
组功能
Group 结构的定义:type Group struct {
Name string
Description string
Members []string // identity patterns, except GRP.
BindACLs []string // The list of ACLs, controls who can access this group.
}
GroupManager 函数的定义:
| 函数 | 说明 |
|---|---|
| 创建(组组,标识 *x509)。证书(错误) |
创建新组。 身份必须具有对引导组的 CREATE 访问权限 "。组”。如果 identity 为 nil,则使用 NewGroupManager() 中指定的缺省标识。 |
| Get(groupName 字符串,标识 *x509)。证书(组,错误) |
获取指定的组。 身份必须具有对此组的 READ 访问权限。如果 identity 为 nil,则使用 NewGroupManager() 中指定的缺省标识。 |
| Delete(groupName 字符串,标识 *x509)。证书(错误) |
删除指定的组。 身份必须具有对此组的 DELETE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| AddMembers(groupName string,member []string,identity *x509)。证书(错误) |
将一个或多个成员添加到组中。 身份必须具有对此组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| RemoveMembers(groupName string,member []string,identity *x509)。证书(错误) |
从组中删除一个或多个成员。 身份必须具有对此组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| UpdateDescription(groupName string,newDes string,identity *x509)。证书(错误) |
更新说明。 身份必须具有对此组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| AddBeforeACL(groupName string,beforeName string,aclName string,identity *x509)。证书(错误) |
将绑定 ACL 添加到现有命名 ACL 之前的组。如果指定的 ACL 为空或未找到,则会将 ACL 添加到资源的绑定 ACL 列表的开头。 身份必须具有对指定组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| AddAfterACL(groupName string,afterName string,aclName string,identity *x509)。证书(错误) |
将绑定 ACL 添加到现有命名 ACL 之后的组。如果指定的 ACL 为空或未找到,则会将 ACL 添加到该组的绑定 ACL 列表的末尾。 身份必须具有对指定组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| RemoveBindACL(groupName string,aclName string,identity *x509)。证书(错误) |
从指定组的绑定 ACL 列表中删除指定的 ACL。 身份必须具有对指定组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
| GetAll(身份 *x509)。证书([] 组,错误) |
获取所有组。 身份必须具有对这些组的 READ 访问权限。如果标识为 nil,则使用 NewGroupManager () 中指定的缺省标识。 |
资源功能
Resource 结构的定义:type Resource struct {
Name string
Description string
BindACLs []string // The name list of ACL, controls who can access this resource
}
资源功能:
| 拍卖 | 说明 |
|---|---|
| Create(resource Resource,资源,身份 *x509)。证书(错误) |
创建新的资源。不允许重复的命名资源。 身份需要对名为 “ 的引导资源具有 CREATE 访问权限。资源”如果标识为空,则使用 NewResourceManager() 中指定的默认标识。 |
| Get(resName 字符串,标识 *x509)。证书(资源,错误) |
获取指定的资源。 身份必须对资源具有 READ 访问权限。如果标识为空,则使用 NewResourceManager() 中指定的默认标识。 |
| Delete(resName 字符串,标识 *x509)。证书(错误) |
删除指定的资源。 身份必须对指定的资源具有 DELETE 访问权限。如果标识为空,则使用 NewResourceManager() 中指定的默认标识。 |
| UpdateDescription(resourceName string,newDes string,identity *x509)。证书(错误) |
更新说明。 身份必须具有对此资源的 UPDATE 访问权限。如果 identity 为 nil,则使用 NewResourceManager() 中指定的缺省标识。 |
| AddBeforeACL(resourceName string,beforeName string,aclName string,identity *x509)。证书(错误) |
将绑定 ACL 添加到现有命名 ACL 之前的资源。如果指定的 ACL 为空或未找到,则会将 ACL 添加到资源的绑定 ACL 列表的开头。 身份必须具有对指定资源的 UPDATE 访问权限。如果 identity 为 nil,则使用 NewResourceManager() 中指定的缺省标识。 |
| AddAfterACL(resourceName string,afterName string,aclName string,identity *x509)。证书(错误) |
将绑定 ACL 添加到现有命名 ACL 之后的资源。如果指定的 ACL 为空或未找到,则会将 ACL 添加到资源的绑定 ACL 列表的末尾。 身份必须具有对指定资源的 UPDATE 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的默认标识。 |
| RemoveBindACL(resourceName string,aclName string,identity *x509)。证书(错误) |
从指定资源的绑定 ACL 列表中删除指定的 ACL。 身份必须具有对指定资源的 UPDATE 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的默认标识。 |
| CheckAccess(resName 字符串,访问字符串,身份 *x509)。证书 (bool,error) |
检查当前用户是否具有指定对指定资源的访问权限。 如果标识为 nil,则使用 NewResourceManager() 中指定的默认标识。 |
| GetAll(身份 *x509)。证书([] 资源,错误) |
获取所有资源。 身份必须具有对这些资源的 READ 访问权限。如果 identity 为 nil,则使用 NewResourceManager() 中指定的缺省标识。 |