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