5个版本
0.1.4 | 2020年2月1日 |
---|---|
0.1.3 | 2020年1月27日 |
0.1.2 | 2020年1月27日 |
0.1.1 | 2020年1月27日 |
0.1.0 | 2020年1月27日 |
#50 in #role
13KB
168 行
hc_roles_mixin
通用的holochain混入,用于在任何holochain应用程序中包含管理员和动态角色,使用祖先模式。
此混入针对 hc v0.0.42-alpha3
进行构建。它还依赖于holochain_anchors存在并配置。
已知问题:由于更新条目未传播,此混入实际上在真实环境中无法工作,因为它依赖于角色条目的更新在整个网络中传播。
设计
以下是此混入的设计:https://hackmd.io/6xfwfSVYSGeZe3vQ_-1cWw?view.
文档
在此处可以找到此混入的文档:https://docs.rs/hc_roles_mixin.
安装
将以下内容添加到您的zomes cargo toml中。
holochain_anchors = "0.2.1"
hc_roles_mixin = "0.1.3"
用法
设置
将锚点条目定义添加到您的zome中。
#[entry_def]
fn anchor_def() -> ValidatingEntryType {
holochain_anchors::anchor_definition()
}
将角色条目定义添加到您的zome中。
#[entry_def]
fn roles_def() -> ValidatingEntryType {
hc_roles_mixin::role_entry_def()
}
在您的 init
函数中,创建 Admin
角色
#[init]
fn init() {
hc_roles_mixin::handlers::create_admin_role()?;
Ok(())
}
创建角色
要创建角色,请简单地调用 create_role
函数
#[zome_fn("hc_public")]
fn some_public_function() {
let my_role_name = String::from("editor");
hc_roles_mixin::handlers::create_role(&my_role_name)?;
...
}
分配角色
要分配角色,请简单地调用 assign_role
函数
#[zome_fn("hc_public")]
fn some_other_public_function(agent_address: Address) {
let my_role_name = String::from("editor");
hc_roles_mixin::handlers::assign_role(&my_role_name, &agent_address)?;
...
}
检查用户是否具有特定角色
要检查用户是否具有特定角色,可以使用验证函数 has_agent_role
validation: | _validation_data: hdk::EntryValidationData<MyEntry>| {
match _validation_data {
hdk::EntryValidationData::Create { entry, validation_data } => {
let agent_address = &validation_data.sources()[0];
let is_agent_permitted_to_create_this_entry = hc_roles_mixin::validaton::has_agent_role(&agent_address, String::from("editor"))?;
if !is_agent_permitted_to_create_this_entry {
return Err(String::from("Only editors can create a new entry"));
}
...
取消分配角色
要取消分配角色,请简单地调用 unassign_role
函数
#[zome_fn("hc_public")]
fn some_other_public_function(agent_address: Address) {
let my_role_name = String::from("editor");
hc_roles_mixin::handlers::unassign_role(&my_role_name, &agent_address)?;
...
}
依赖关系
~21–30MB
~492K SLoC