细粒度访问控制库函数

库软件包为资源、组和 ACL 以及全局功能提供以下功能。

全局函数

函数 说明
Initialization(identity *x509.Certificate, stub shim.ChaincodeStubInterface) (error) (error)

部署链代码后,将调用 Initialization 函数。此函数使用一些内置的访问控制列表初始化世界状态。这些内置列表用于引导环境。必须对谁可以创建资源、组和 ACL 进行访问控制。如果身份为 nil,则函数使用调用者的身份。

完成引导过程后,将创建以下实体:

  • 名为 .Resources 的资源。将使用采用 "%CN%bob.smith@oracle.com" 格式的单个身份模式创建名为 .Resources.ACL 的对应 ACL(使用实际公用名称),并且访问将为 CREATE、READ、UPDATE 和 DELETE 访问权限。
  • 名为 .Groups 的组。将使用采用 "%CN%bob.smith@oracle.com" 格式的单个身份模式创建名为 .Groups.ACL 的对应 ACL(使用实际公用名称),并且访问将为 CREATE、READ、UPDATE 和 DELETE 访问权限。
  • 名为 .ACLs 的 ACL。将使用采用 "%CN%bob.smith@oracle.com" 格式的单个身份模式创建名为 .ACLs.ACL 的对应 ACL 控制列表,使用实际公用名称,访问权限将为 CREATE、READ、UPDATE 和 DELETE 访问权限。
NewGroupManager(identity *x509.Certificate, stub shim.ChaincodeStubInterface) (*GroupManager, error)

获取用于所有组相关操作的组管理器。

Identity(身份):相关操作的默认身份。如果是 nil,则函数使用调用者的身份。

NewACLManager(identity *x509.Certificate, stub shim.ChaincodeStubInterface) (*ACLManager, error)

获取用于所有 ACL 相关操作的 ACL 管理器。

Identity(身份):相关操作的默认身份。如果是 nil,则函数使用调用者的身份。

NewResourceManager(identity *x509.Certificate, stub shim.ChaincodeStubInterface) (*ResourceManager, error)

获取用于所有资源相关操作的资源管理器。

Identity(身份):相关操作的默认身份。如果是 nil,则函数使用调用者的身份。

访问控制列表 (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(访问): Accesses(访问)字符串是逗号分隔的任意访问名的列表,完全可以访问应用程序,但以下四项除外:CREATE、READ、UPDATE 和 DELETE。这些访问值用于维护细粒度的访问控制。应用程序可以使用自己的访问字符串(例如 "register""invoke""query"),甚至可以使用访问字段名称(例如 "owner""quantity" 等)等。
  • 允许:允许确定匹配模式的身份是允许访问 (true) 还是禁止访问 (false)。您可以有一个访问控制列表,指示 Bob 可以访问 "CREATE",另一个列表指示 "CREATE" 禁止使用 Oracle 组(其中 Bob 是其成员)。Bob 是否具有访问权限取决于与相关实体关联的访问控制列表的顺序。
  • BindACLs:BindACLs 参数构成初始访问控制列表。

ACL 函数:

函数 说明
Create(acl ACL, identity *x509.Certificate) (error)

创建 ACL。不允许重复的命名 ACL。

要创建 ACL,身份必须具有对名为 “ 的引导资源的 CREATE 访问权限。ACL”。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

Get(aclName string, identity *x509.Certificate) (ACL, error)

获取命名的 ACL。

身份必须具有对指定 ACL 的 READ 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

Delete(aclName string, identity *x509.Certificate) (error)

删除指定的 ACL。

身份必须具有对指定 ACL 的 DELETE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

Update(acl ACL, identity *x509.Certificate) (error)

更新 ACL。

身份必须具有对指定资源的 UPDATE 访问权限,并且指定的 ACL 必须存在。如果标识为 nil,则使用 NewACLManager() 中指定的缺省标识。

AddPattern(aclName string, pattern string, identity *x509.Certificate) (error)

向指定的 ACL 添加新的身份模式。身份必须对指定的 ACL 具有 UPDATE 访问权限。

如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

RemovePattern(aclName string, pattern string, identity *X509Certificate) (error)

从 ACL 中删除身份模式。身份必须对指定的 ACL 具有 UPDATE 访问权限。

如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

AddAccess(aclname string, access string, identity *X509Certificate) (error)

添加对命名 ACL 的新访问权限。身份必须对指定的 ACL 具有 UPDATE 访问权限。

如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

RemoveAccess(aclName string, access string, identity *X509Certificate) (error)

从 ACL 中删除访问权限。身份必须对指定的 ACL 具有 UPDATE 访问权限。

如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

UpdateDescription(aclName string, newDescription string, identity *X509Certificate) (error)

更新说明。

身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

AddBeforeACL(aclName string, beforeName string, newBindACL string, identity *X509Certificate) (error)

在现有命名 ACL 之前添加绑定 ACL。如果指定的 ACL 为空或未找到,则会将 ACL 添加到绑定 ACL 列表的开头。

身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

AddAfterACL(aclName string, afterName string, newBindACL string, identity *X509Certificate) (error)

在现有命名 ACL 之后添加绑定 ACL。如果指定的 ACL 为空或未找到,则会将 ACL 添加到绑定 ACL 列表的末尾。

身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

RemoveBindACL(aclName string, removeName string, identity *X509Certificate) (error)

从绑定 ACL 列表中删除 removeName ACL。

身份必须具有对指定 ACL 的 UPDATE 访问权限。如果标识为 nil,则使用 newACLManager() 中指定的缺省标识。

GetAll(identity *x509.Certificate) ([]ACL, error)

获取所有 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 函数的定义:

函数 说明
Create(group Group, identity *x509.Certificate) (error)

创建组。

身份必须具有对引导组 .Group 的 CREATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

Get(groupName string, identity *x509.Certificate) (Group, error)

获取指定的组。

身份必须具有对此组的 READ 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

Delete(groupName string, identity *x509.Certificate) (error)

删除指定的组。

身份必须具有对此组的 DELETE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

AddMembers(groupName string, member []string, identity *x509.Certificate) (error)

向组中添加一个或多个成员。

身份必须具有对此组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

RemoveMembers(groupName string, member []string, identity *x509.Certificate) (error)

从组中删除一个或多个成员。

身份必须具有对此组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

UpdateDescription(groupName string, newDes string, identity *x509.Certificate) (error)

更新说明。

身份必须具有对此组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

AddBeforeACL(groupName string, beforeName string, aclName string, identity *x509.Certificate) (error)

将绑定 ACL 添加到现有命名 ACL 之前的组。如果指定的 ACL 为空或未找到,则会将 ACL 添加到资源的绑定 ACL 列表的开头。

身份必须具有对指定组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

AddAfterACL(groupName string, afterName string, aclName string, identity *x509.Certificate) (error)

将绑定 ACL 添加到现有命名 ACL 之后的组。如果指定的 ACL 为空或未找到,则会将 ACL 添加到该组的绑定 ACL 列表的末尾。

身份必须具有对指定组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

RemoveBindACL(groupName string, aclName string, identity *x509.Certificate) (error)

从指定组的绑定 ACL 列表中删除指定的 ACL。

身份必须具有对指定组的 UPDATE 访问权限。如果标识为 nil,则使用 NewGroupManager() 中指定的缺省标识。

GetAll(identity *x509.Certificate) ([]Group, error)

获取所有组。

身份必须具有对这些组的 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, identity *x509.Certificate) (error)

创建资源。不允许重复的命名资源。

身份必须具有对 .Resources 引导资源的 CREATE 访问权限。如果标识为空,则使用 NewResourceManager() 中指定的缺省标识。

Get(resName string, identity *x509.Certificate) (Resource, error)

获取指定的资源。

身份必须对资源具有 READ 访问权限。如果标识为空,则使用 NewResourceManager() 中指定的缺省标识。

Delete(resName string, identity *x509.Certificate) (error)

删除指定的资源。

身份必须对指定的资源具有 DELETE 访问权限。如果标识为空,则使用 NewResourceManager() 中指定的缺省标识。

UpdateDescription(resourceName string, newDes string, identity *x509.Certificate) (error)

更新说明。

身份必须具有对此资源的 UPDATE 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的缺省标识。

AddBeforeACL(resourceName string, beforeName string, aclName string, identity *x509.Certificate) (error)

将绑定 ACL 添加到现有命名 ACL 之前的资源。如果指定的 ACL 为空或未找到,则会将 ACL 添加到资源的绑定 ACL 列表的开头。

身份必须具有对指定资源的 UPDATE 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的缺省标识。

AddAfterACL(resourceName string, afterName string, aclName string, identity *x509.Certificate) (error)

将绑定 ACL 添加到现有命名 ACL 之后的资源。如果指定的 ACL 为空或未找到,则会将 ACL 添加到资源的绑定 ACL 列表的末尾。

身份必须具有对指定资源的 UPDATE 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的缺省标识。

RemoveBindACL(resourceName string, aclName string, identity *x509.Certificate) (error)

从指定资源的绑定 ACL 列表中删除指定的 ACL。

身份必须具有对指定资源的 UPDATE 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的缺省标识。

CheckAccess(resName string, access string, identity *x509.Certificate) (bool, error)

检查当前用户是否具有指定对指定资源的访问权限。

如果标识为 nil,则使用 NewResourceManager() 中指定的缺省标识。

GetAll(identity *x509.Certificate) ([]Resource, error)

获取所有资源。

身份必须具有对这些资源的 READ 访问权限。如果标识为 nil,则使用 NewResourceManager() 中指定的缺省标识。