#acl #solana #macro #anchor #rbac #programs #sol

sol-cerberus-macros

Rust宏,用于简化Sol Cerberus (RBAC)集成到Solana Anchor程序的过程

8 个版本

0.1.10 2023年10月14日
0.1.9 2023年9月28日
0.1.8 2023年7月23日
0.1.7 2023年6月28日
0.1.1 2023年2月27日

#646 in 认证


sol-cerberus 中使用

GPL-3.0-or-later

19KB
265

Sol Cerberus

新的权威

Website Website Website Crates.io

sol-cerberus-macros

一组有用的Anchor宏,用于抽象化Sol Cerberus RBAC的复杂性,通过几行代码将完整的访问控制系统集成到您的程序中。

安装

要安装最新版本,请将 sol-cerberus-macros 添加到您的 Cargo.toml 文件的依赖项中

[dependencies]
sol-cerberus-macros  = "*"

#[rule (资源,权限)] 宏

#[rule] 宏注释了Anchor指令,它检查当前运行指令的用户是否有权访问定义的 ResourcePermission。例如以下规则宏示例只允许访问允许访问资源 Homepage 和权限 Write 的角色。

declare_id!("AjO97SU3FWq652tMMzNSbmPMeM4jtKDP3nLJp9APctFA");

const SOL_CERBERUS_APP_ID: Pubkey = pubkey!("9R5QMs9rEJ6BMvSF84yw91qnRBXKEBJbeQnZVX84C3");

#[program]
pub mod my_program {
    use super::*;

    #[rule(Homepage, Write)]
    pub fn my_instruction(_ctx: Context<MyContext>) -> Result<()> {
         Ok(())
    }
}

如果某个用户尝试在没有提到的权限的情况下运行此指令,将会收到一个 Unauthorized 错误。

#[sol_cerberus_accounts] 宏

#[sol_cerberus_accounts] 宏注释了Anchor账户,为执行权限检查添加了所有必要的账户。使用 #[rule]#[sol_cerberus_accounts] 宏的完整示例如下

declare_id!("AjO97SU3FWq652tMMzNSbmPMeM4jtKDP3nLJp9APctFA");

pub const SOL_CERBERUS_APP_ID: &'static str = "9R5QMs9rEJ6BMvSF84yw91qnRBXKEBJbeQnZVX84C3";

#[program]
pub mod my_program {
    use super::*;

    #[rule(Homepage, Write)]
    pub fn my_instruction(_ctx: Context<MyContext>) -> Result<()> {
         Ok(())
    }
}

#[sol_cerberus_accounts]
#[derive(Accounts)]
pub struct MyContext<'info> {
    #[account(mut)]
    pub signer: Signer<'info>,
    /// CHECK: Validated on CPI call
    pub sol_cerberus_app: UncheckedAccount<'info>,
    /// CHECK: Validated on CPI call
    pub sol_cerberus_rule: Option<UncheckedAccount<'info>>,
    /// CHECK: Validated on CPI call
    pub sol_cerberus_role: Option<UncheckedAccount<'info>>,
    /// CHECK: Validated on CPI call
    pub sol_cerberus_token: Option<UncheckedAccount<'info>>,
    /// CHECK: Validated on CPI call
    pub sol_cerberus_metadata: Option<UncheckedAccount<'info>>,
    #[account(mut)]
    pub sol_cerberus_seed: Option<UncheckedAccount<'info>>,
    pub sol_cerberus: Program<'info, SolCerberus>,
    pub system_program: Program<'info, System>,
}

以下是索尔·塞伯鲁斯验证用户访问所需的账户。希望在未来版本的Anchor中,添加所有这些UncheckedAccounts将不再必要,因为#[sol_cerberus_accounts]会自动添加所有账户。但Anchor目前要求明确定义账户才能构建IDL。

依赖项

~280–730KB
~17K SLoC