细粒度访问控制库函数

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

全局函数

函数 说明
初始化(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(错误)(错误)

实例化链代码时,将调用初始化函数。该函数将使用一些内置的访问控制列表初始化世界状态。这些内置列表用于引导环境。因此,需要对谁可以创建资源、组和 ACL 进行访问控制。如果标识为 nil,则使用调用者的标识。

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

  • 名为 " 的资源。资源”。名为 “ 的对应 ACL。将使用实际公用名称创建 Resources.ACL, 其中包含单个标识模式 , 格式为 ”%CN%bob.smith@oracle.com",访问方式为 CREATE、READ、UPDATE 和 DELETE 访问。
  • 名为 " 的组。组”。名为 “ 的对应 ACL。将使用实际公用名称创建 Groups.ACL, 其中包含单个标识模式 , 格式为 ”%CN%bob.smith@oracle.com",访问方式为 CREATE、READ、UPDATE 和 DELETE 访问。
  • 名为 " 的 ACL。ACL”。一个名为 “ 的对应 ACL 控制列表。将使用实际公用名称创建 ACLs.ACL, 其中包含单个标识模式 , 格式为 ”%CN%bob.smith@oracle.com",访问方式为 CREATE、READ、UPDATE 和 DELETE 访问。
NewGroupManager(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(*GroupManager,错误)

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

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

NewACLManager(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(*ACLManager,错误)

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

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

NewResourceManager(身份 *x509)。证书,存根 shim.ChaincodeStubInterface)(*ResourceManager,错误)

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

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

ACL 函数:

函数 说明
创建(ACL ACL,身份 *x509)。证书 )(错误)

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

要创建新的 ACL,身份需要对名为 " 的引导资源具有 CREATE 访问权限。ACL”。如果标识为 nil,则使用在 newACLManager() 中指定的默认标识。

Get(aclName 字符串,标识 *x509)。证书 )(ACL,错误)

获取指定的 ACL。

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

删除(aclName 字符串,标识 *x509)。证书 )(错误)

删除指定的 ACL。

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

Update(ACL ACL,身份 *x509)。证书 )(错误)

更新 ACL。

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

AddPattern(aclName 字符串,模式字符串,身份 *x509)。证书 )(错误)

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

如果标识为 nil,则使用在 newACLManager() 中指定的默认标识。

RemovePattern(aclName 字符串,模式字符串,身份 *X509Certificate)(错误)

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

如果标识为 nil,则使用在 newACLManager() 中指定的默认标识。

AddAccess(aclname string,access string,identity *X509Certificate)(错误)

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

如果标识为 nil,则使用在 newACLManager() 中指定的默认标识。

RemoveAccess(aclName 字符串,访问字符串,身份 *X509Certificate)(错误)

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

如果标识为 nil,则使用在 newACLManager() 中指定的默认标识。

UpdateDescription(aclName 字符串,newDescription 字符串,身份 *X509Certificate)(错误)

更新描述。

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

AddBeforeACL(aclName 字符串,beforeName 字符串,newBindACL 字符串,身份 *X509Certificate)(错误)

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

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

AddAfterACL(aclName 字符串,afterName 字符串,newBindACL 字符串,身份 *X509Certificate)(错误)

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

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

RemoveBindACL(aclName 字符串,removeName 字符串,身份 *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 访问权限。组”。如果标识为 nil,则使用在 NewGroupManager() 中指定的默认标识。

Get(groupName 字符串,标识 *x509)。证书 )(组,错误)

获取指定的组。

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

删除(groupName 字符串,标识 *x509)。证书 )(错误)

删除指定的组。

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

AddMembers(groupName 字符串,成员 [] 字符串,标识 *x509。证书)(错误)

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

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

RemoveMembers(groupName 字符串,成员 [] 字符串,标识 *x509。证书)(错误)

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

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

UpdateDescription(groupName 字符串,newDes 字符串,身份 *x509。证书)(错误)

更新描述。

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

AddBeforeACL(groupName 字符串,beforeName 字符串,aclName 字符串,身份 *x509。证书)(错误)

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

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

AddAfterACL(groupName 字符串,afterName 字符串,aclName 字符串,身份 *x509。证书)(错误)

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

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

RemoveBindACL(groupName 字符串,aclName 字符串,身份 *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
}

资源函数:

功能 说明
创建(资源资源,身份 *x509)。证书 )(错误)

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

身份需要对名为 “ 的引导资源具有 CREATE 访问权限。Resources”如果标识为空,则使用在 NewResourceManager() 中指定的默认标识。

Get(resName 字符串,标识 *x509)。证书 )(资源,错误)

获取指定的资源。

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

删除(resName 字符串,标识 *x509)。证书 )(错误)

删除指定的资源。

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

UpdateDescription(resourceName 字符串,newDes 字符串,身份 *x509。证书)(错误)

更新描述。

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

AddBeforeACL(resourceName 字符串,beforeName 字符串,aclName 字符串,身份 *x509。证书)(错误)

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

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

AddAfterACL(resourceName 字符串,afterName 字符串,aclName 字符串,身份 *x509。证书)(错误)

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

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

RemoveBindACL(resourceName 字符串,aclName 字符串,身份 *x509。证书)(错误)

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

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

CheckAccess(resName 字符串,访问字符串,身份 *x509)。证书 (bool,error)

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

如果标识为 nil,则使用在 NewResourceManager() 中指定的默认标识。

GetAll(身份 *x509)。证书([] 资源,错误)

获取所有资源。

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