Fine-Grained Access Control Library 函数

库包为资源、组和 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,错误)

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

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

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

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

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

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

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

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 字符串是逗号分隔的任意访问名称的列表,最多只能包含四个应用程序:CREATE、READ、UPDATE 和 DELETE。这些访问值用于维护精细的访问控制。应用程序可以使用自己的访问字符串(例如 "register""invoke""query"),甚至可以访问字段名称(例如 "owner""quantity" 等)。
  • 允许:允许确定是允许访问 (true) 还是禁止访问 (false)。您可以有一个访问控制列表,指示 Bob 有权访问 "CREATE",另一个列表指示 Oracle 组(Bob 是其成员)禁止访问 "CREATE"。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 字符串,newDescription 字符串,身份 *X509Certificate)(错误)

更新说明。

身份必须具有对指定 ACL 的 UPDATE 访问权限。如果 identity 为 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 访问权限。组”。如果 identity 为 nil,则使用 NewGroupManager() 中指定的默认标识。

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

获取指定的组。

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

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

删除指定的组。

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

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

将一个或多个成员添加到组中。

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

RemoveMembers(groupName 字符串,成员 []string,标识 *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 访问权限。资源”如果标识为空,则使用 NewResourceManager() 中指定的默认标识。

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

获取指定的资源。

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

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

删除指定的资源。

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

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

更新说明。

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

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

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

身份必须具有对指定资源的 UPDATE 访问权限。如果 identity 为 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)。证书 )(错误,错误)

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

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

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

获取所有资源。

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