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 中使用
19KB
265 行
sol-cerberus-macros
一组有用的Anchor宏,用于抽象化Sol Cerberus RBAC的复杂性,通过几行代码将完整的访问控制系统集成到您的程序中。
安装
要安装最新版本,请将 sol-cerberus-macros
添加到您的 Cargo.toml 文件的依赖项中
[dependencies]
sol-cerberus-macros = "*"
#[rule (资源,权限)] 宏
#[rule]
宏注释了Anchor指令,它检查当前运行指令的用户是否有权访问定义的 Resource
和 Permission
。例如以下规则宏示例只允许访问允许访问资源 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