许可证
对于区块链上的各种操作,例如钱或烧毁资产,账户需要许可令牌.
公共区块链和私人区块链在用户获得的许可方面存在差异.在公共区块链中,大多数账户都有相同的权限.在私人区块链中,大多数账户被认为不能做任何事情.在授予他们权限之外,除非明确授予相关许可.
持有某事许可证意味着账户具有相应的 Permission.许可证可以直接或通过 Role,允许使用 Grant 指令授予权限.许可证和角色不会过期,请用 Revoke 指令删除它们.
许可证代码
许可令牌是由主动执行者定义的类型对象.有些令牌是全球性的,例如 CanManagePeers,而其他则是针对特定账本对象,如帐户,资产,资产定义,域名, NFT,角色或触发器等.
以下是用于各种权限令牌的参数的一些例子:
允许修改特定账户的元数据的代币具有
account字段:json{ "account": "<AccountId>" }一个为特定资产定义授权转移资产的代币具有
asset_definition字段:json{ "asset_definition": "<AssetDefinitionId>" }像
CanManagePeers这样的全球代币没有领域:json{}
预先配置的权限令牌
在 Reference章中可以找到预先配置的权限代币列表.
许可类别 (角色)
一组权限被称为角色.类似于权限代币,可以使用 Grant 指令授予角色,并使用 Revoke 指令撤销角色.
在赋予账户角色之前,该角色应首先被注册.
当多个账户获得相同的权限集时,角色是有用的. 一次注册该角色,授予该角色的权限,然后授予或撤销单个帐户的角色.
登记一个新角色
让我们注册一个新的角色, 当授予时,将允许另一个帐户访问 元数据 在鼠标的账户:
let role_id = RoleId::from_str("ACCESS_TO_MOUSE_METADATA")?;
let role = iroha_data_model::role::Role::new(role_id.clone(), mouse_id.clone())
.add_permission(CanModifyAccountMetadata {
account: mouse_id.clone(),
});
let register_role = Register::role(role);给一个角色
在这个角色被注册后,鼠标可以授予阿丽丝:
let grant_role = Grant::account_role(role_id, alice_id);
let grant_role_tx = TransactionBuilder::new(chain_id, mouse_id)
.with_instructions([grant_role])
.sign(mouse_private_key);许可证验证器
允许存在,因此只有需要的权限符号的帐户才能执行受保护的操作.默认执行器在命令,查询和表达式执行过程中检查权限.
默认验证器表面按账本区分组合:
- 同行管理
- 域名和账户
- 资产, NFTs,以及保证金
- 触发器
- 角色和权限
- 执行器/运行时间,证据,桥梁和 SORA/Nexus 模块
准确的代币列表在 Permission Tokens引用中得到源支持.
运行时间验证器
允许检查由主动执行器执行.默认执行器提供内置的权限验证器和代币定义,网络可以通过升级使用的执行器来改变政策.
验证者返回验证判决.验证人可以允许操作,理由地拒绝它,或者如果该操作不在验证者的范围之外,跳过它.所选的法官将这些裁决结合在一起来决定指示,查询或表达是否可以继续进行.
支持的查询
可以查询许可证和角色.
角色的查询:
权限令牌的查询: