使用go-loom合约中的权限
用go-loom编写的合约可以使用辅助函数来设置和检查任意标记的权限。
这有点类似于在Solidity里OpenZeppelin的 Ownable概念。
Every permission has three attributes:
- address
- token
- role
代币可以是任何字符或字节序列,表示要拥有的对象。 例如, 一个人用户名可以是代币, 那个人拥有所有权。 其他类似于代币的东西也可以拥有所有权。
权限 role
被授予给 token
上的address
。 例如, 创建帐户时, 可以将 owner
权限授予username
代币上的发件人地址。
例如
ctx.GrantPermission([]byte(userName), []string{"owner"})
这会将userName
(代币)的权限授予owner
到事务的发送者地址。这个角色是一个通过一次调用授予多个权限的数组。
要检查事务发送者的权限,
if ok, _ := ctx.HasPermission([]byte(userName), []string{"owner"}); !ok {
return errors.New("User unverified")
}
HasPermission 返回一个布尔值(来表明匹配关系)和一个address
和role
组合匹配的角色子集。
还有另外两个低级函数以任意地址的权限运行。
HasPermissionFor(addr loom.Address, token []byte, roles []string) (bool, []string)
GrantPermissionTo(addr loom.Address, token []byte, role string)