跳至主要内容
此页面是从英文翻译而来的。请注意,与原始页面相比,可能会出现错误或差异。真实的文档来源应始终是英文版本。

“创建和关联自定义权限”

简介

在EOS区块链上,您可以为账户创建各种自定义权限。稍后可以将自定义权限链接到合约的操作。该权限系统使智能合约能够拥有灵活的授权方案。

本教程说明了自定义权限的创建,以及如何将该权限关联到操作。完成这些步骤后,除非提供了新链接的权限的授权,否则将禁止执行合同的操作。这使您可以更精细地控制账户及其各种操作。

权力越大,责任越大。此功能对您的合同及其用户的安全性构成了一些挑战。在使用概念和步骤之前,请确保您了解这些概念和步骤。

[[信息 |家长权限]] | 创建自定义权限时,该权限将始终在父权限下创建。

如果您拥有创建自定义权限所依据的父权限的权限,则可以随时执行需要该自定义权限的操作。

第 1 步。创建自定义权限

首先,让我们在上创建一个新的权限级别 alice 账户:

dune -- cleos set account permission alice upsert YOUR_PUBLIC_KEY owner -p alice@owner

需要注意的几点:

1.创建了一个名为 upsert 的新权限 2.upsert 权限使用开发公钥作为权威证明 3.此权限创建于 alice 帐户

您还可以为此权限指定公钥以外的权限,例如,一组其他账户。

第 2 步。将授权链接到您的自定义权限

关联授权以调用 upsert 使用新创建的权限执行操作:

dune -- cleos set action permission alice addressbook upsert upsert

在此示例中,我们将授权链接到 upsert 之前在通讯簿合同中创建的操作。

第 3 步。测试一下

让我们试着用一个来调用这个动作 active 许可:

dune -- cleos push action addressbook upsert '["alice", "alice", "liddel", 21, "Herengracht", "land", "dam"]' -p alice@active

你应该会看到如下错误:

Error 3090005: Irrelevant authority included
Please remove the unnecessary authority from your action!
Error Details:
action declares irrelevant authority '{"actor":"alice","permission":"active"}'; minimum authority is {"actor":"alice","permission":"upsert"}

现在,试试upsert权限,这次是明确声明我们刚刚创建的upsert权限:(例如 -p alice@upsert)

dune -- cleos push action addressbook upsert '["alice", "alice", "liddel", 21, "Herengracht", "land", "dam"]' -p alice@upsert

现在它起作用了:

dune -- cleos push action addressbook upsert '["alice", "alice", "liddel", 21, "Herengracht", "land", "dam"] -p alice@upsert
executed transaction:

2fe21b1a86ca2a1a72b48cee6bebce9a2c83d30b6c48b16352c70999e4c20983 144 bytes 9489 us
# addressbook <= addressbook::upsert {"user":"alice","first_name":"alice","last_name":"liddel","age":21,"street":"Herengracht","city":"land",...
# addressbook <= addressbook::notify {"user":"alice","msg":"alice successfully modified record to addressbook"}
# eosio <= addressbook::notify {"user":"alice","msg":"alice successfully modified record to addressbook"}
# abcounter <= abcounter::count {"user":"alice","type":"modify"}