sol_cerberus/state/
rule.rs

1use anchor_lang::prelude::*;
2
3#[derive(AnchorSerialize, AnchorDeserialize, Default, Debug)]
4pub struct RuleData {
5    pub namespace: u8,
6    pub role: String,
7    pub resource: String,
8    pub permission: String,
9    pub expires_at: Option<i64>,
10}
11
12/// Namespaces:
13///    0 => Rule (Normal permissions)
14///    1 => AssignRole (White list of roles that can be assigned by certain role)
15///    2 => DeleteAssignRole (White list of roles that can be deleted by certain role)
16///    3 => AddRuleNSRole (White list of namespaces and roles that can be created by certain role)
17///    4 => AddRuleResourcePerm (White list of resources and permissions that can be created by certain role)
18///    5 => DeleteRuleNSRole (White list of namespaces and roles that can be deleted by certain role)
19///    6 => DeleteRuleResourcePerm (White list of resources and permissions that can be deleted by certain role)
20#[repr(u8)]
21pub enum Namespaces {
22    Rule = 0,
23    AssignRole = 1,
24    DeleteAssignRole = 2,
25    AddRuleNSRole = 3,
26    AddRuleResourcePerm = 4,
27    DeleteRuleNSRole = 5,
28    DeleteRuleResourcePerm = 6,
29}
30
31#[account]
32pub struct Rule {
33    pub app_id: Pubkey,
34    pub namespace: u8,
35    pub role: String,
36    pub resource: String,
37    pub permission: String,
38    pub expires_at: Option<i64>,
39    pub bump: u8,
40}
41
42#[event]
43pub struct RulesChanged {
44    pub time: i64,
45    #[index]
46    pub app_id: Pubkey,
47}